非常简单的问题:为什么以下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”部分。
答案 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运算符。因此,上述两个条件中的两个不同条件可能都是正确的,因此您将得到的结果不为空。