MYSQL多个WHERE IN导致LIKE被忽略(?)

标签 mysql sql

我有一个查询不起作用。我已经通过使用单个 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/

相关文章:

php - 在网站上显示问题 30 秒

php - 将变量值传递到 where 条件 laravel 5.2

php - 显示日期时间数据库值时删除秒数

sql - Golang、数据库/sql、Postgres - 在您需要结果时使用 QueryRow 和 INSERT 不良做法?

sql - 如何获取从 SQL 表中删除的最后一行的 Id

mysql - 选择一行mysql条件的多行

mysql - SQL - 如何显示产品的选项,无论它们是否有?

mysql - 在 SQL 中添加列和修剪数据

php - Chrome和Opera在编辑记录时删除记录数据

php - 脚本太慢,mysql连接?