MySQL查询结果说明

时间:2011-11-30 07:17:54

标签: mysql sql

非常简单的问题:为什么以下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”部分。

4 个答案:

答案 0 :(得分:2)

如果你有'{1}}'大卫'那么第一个括号条件为真。如果你有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%') 的{​​{1}}。)

答案 1 :(得分:0)

使用NOT LIKE

将OR更改为AND
(`FirstName` NOT LIKE 'D%' AND `LastName` NOT LIKE 'D%' AND `City` NOT LIKE 'D%')

如果第一个条件为真,则使用OR,不会检查其余条件,因此您在那里有匹配的行。

答案 2 :(得分:0)

FirstName = Arunava
LastName = Dey
城市=纽约

第一部分是真的因为LastName LIKE'D%'是真的 第二部分是真正的警告FirstName不喜欢'D%'是真的 城市可以是任何东西。

答案 3 :(得分:0)

您在条件中使用OR运算符。因此,上述两个条件中的两个不同条件可能都是正确的,因此您将得到的结果不为空。