我有一个查询不起作用。我已经通过使用单个 IN 语句解决了这个问题(我用来构建查询的库导致了这种情况的发生),但我仍然很好奇为什么会发生这种情况。
查询如下:
SELECT * FROM (`table`)
WHERE `field` = 'false'
AND `something` LIKE '%string%'
AND `status_id` IN ('1')
OR `status_id` IN ('2')
OR `status_id` IN ('3')
查询对我来说是有道理的:从表中选择所有字段 = false 的东西,比如字符串和状态 ID 在 1 中,或者状态 ID 在 2 中,或者状态 ID 在 3 中
当有多个 IN 语句时,查询的 LIKE 部分将被完全忽略。
知道为什么多个 IN 语句会导致 LIKE 被忽略吗?我不知道为什么:重新安排查询没有影响(将 LIKE 移到末尾而不是开始)
最佳答案
优先? AND 和 OR 不应该用括号来区分吗? status_id
IN ('x') 如果为真,将导致表达式的其余部分被忽略。
SELECT * FROM (`table`)
WHERE `field` = 'false'
AND `something` LIKE '%string%'
AND (`status_id` IN ('1')
OR `status_id` IN ('2')
OR `status_id` IN ('3')
)
与
相同SELECT * FROM (`table`)
WHERE `field` = 'false'
AND `something` LIKE '%string%'
AND `status_id` IN ('1', '2', '3')
亲自尝试一下,看看结果如何。
SELECT * FROM (`table`)
WHERE `field` = 'false'
AND `something` LIKE '%string%'
AND `status_id` IN ('1')
OR 1=1
问问自己这个查询应该返回什么
关于MYSQL多个WHERE IN导致LIKE被忽略(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697653/