[英]MySQL Query result explanation
非常直截了当的问题:为什么以下SQL的输出不为空?
SELECT * FROM table WHERE
(`FirstName` LIKE 'D%' OR `LastName` LIKE 'D%' OR `City` LIKE 'D%')
AND
(`FirstName` NOT LIKE 'D%' OR `LastName` NOT LIKE 'D%' OR `City` NOT LIKE 'D%')
我正在使用MySQL 5.1。 结果是忽略了“NOT LIKE”部分。
如果您的FirstName
是“David”,则第一个括号条件为真。如果您的LastName
为“Smith”,则第二个括号条件为true,您的查询将返回该结果。
你可能意味着要做的是这样的:
SELECT * FROM table WHERE
(`FirstName` LIKE 'D%' OR `LastName` LIKE 'D%' OR `City` LIKE 'D%')
AND
(`FirstName` NOT LIKE 'D%' AND `LastName` NOT LIKE 'D%' AND `City` NOT LIKE 'D%')
(注意已经更改为AND
的OR
。)
使用NOT LIKE将OR更改为AND
(`FirstName` NOT LIKE 'D%' AND `LastName` NOT LIKE 'D%' AND `City` NOT LIKE 'D%')
使用OR如果第一个条件为真,则不会检查其余条件,因此您在那里有匹配的行。
FirstName = Arunava
LastName = Dey
城市=纽约
第一部分是真的因为LastName LIKE'D%'是真的
第二部分是真正的警告FirstName NOT LIKE'D%'是真的
城市可以是任何东西。
您在条件中使用OR运算符。 所以有可能上述两个条件中的两个不同的条件都是正确的,所以你得到的结果不是null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.