繁体   English   中英

MySQL查询结果说明

[英]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%')

(注意已经更改为ANDOR 。)

使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM