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
Run Code Online (Sandbox Code Playgroud)
在上面的第二个选择中,我也期望"amar"记录,因为该名称与First,second或last name不匹配.
Ja͢*_*͢ck 28
与NULL收益率的任何比较NULL.为了解决这个问题,您可以使用三个运算符:
x IS NULL- 确定左手表达是否是NULL,x IS NOT NULL - 像上面一样,但相反,x <=> y- 以安全的方式比较两个操作数的相等性,即被NULL视为正常值.对于您的代码,您可能需要考虑使用第三个选项并使用null安全比较:
SELECT * FROM mycompare
WHERE NOT(name <=> fname OR name <=> mname OR name <=> lname)
Run Code Online (Sandbox Code Playgroud)