MySQL查询结果解释

问题描述:

非常简单的问题:为什么以下SQL的输出不为空?MySQL查询结果解释

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。结果是忽略了“不一样”部分。

+0

谢谢大家的快速回复。任何人都可以建议我如何将'NOT LIKE'部分更改为'FULLTEXT'搜索。 – thelastray

如果你有一个FirstName是的“大卫”,那么第一个括号中的条件为真。如果你有一个LastName‘史密斯’,那么第二个括号条件为真,你的查询将返回结果。

你大概的意思是做是这样的:

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 S中OR S)

更改或与,NOT LIKE

(`FirstName` NOT LIKE 'D%' AND `LastName` NOT LIKE 'D%' AND `City` NOT LIKE 'D%') 

随着OR第一条件是成立的情况下的其余部分将不会有检查,因此你匹配的行。

姓= Arunava
姓氏=德伊
市=纽约

第一部分是真正的原因姓氏LIKE“d%”是真实的
第二部分是真实的caues姓NOT LIKE“d%”是真实的
市可不管。

您在条件中使用OR运算符。所以有可能上述两个不同的条件是真的,所以你会得到结果不为空。