CREATE TABLE `mycompare` ( `name` varchar(100) default NULL, `fname` varchar(100) default NULL, `mname` varchar(100) default NULL, `lname` varchar(100) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `mycompare` VALUES('amar', 'ajay', 'shankar', NULL); INSERT INTO `mycompare` VALUES('akbar', 'bhai', 'aslam', 'akbar'); INSERT INTO `mycompare` VALUES('anthony', 'john', 'Jim', 'Ken'); _____ SELECT * FROM mycompare WHERE (name = fname OR name = mname OR name = lname) akbar bhai aslam akbar select * from mycompare where !(name = fname OR name = mname OR name = lname) anthony john Jim Ken
在上面的第二个选择中,我也希望“ amar”记录,因为该名称与名字,名字或姓氏不匹配。
任何与NULL收益的比较NULL。为了克服这个问题,可以使用三个运算符:
NULL
x IS NULL
x IS NOT NULL
x <=> y
对于您的代码,您可能要考虑使用第三个选项,并进行null安全比较:
SELECT * FROM mycompare WHERE NOT(name <=> fname OR name <=> mname OR name <=> lname)