MYSQL中的多个原因可能会被忽略(?)

MYSQL中的多个原因可能会被忽略(?),mysql,sql,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语句解决了这个问题(我用来构造查询的库导致了这种情况),但我仍然很好奇为什么会发生这种情况

查询如下:

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') 
这个查询对我来说很有意义:从表中选择所有内容,其中field=false,类似字符串,status id为1,status id为2,status id为3

当存在多个IN语句时,将完全忽略查询的类似部分


你知道为什么语句中的mutliple会导致LIKE被忽略吗?我不明白为什么:重新安排查询没有任何影响(将类似项移动到末尾而不是开始)

顺序?你不应该用括号来区分AND和OR吗<如果为true,则('x')中的code>status_id将导致忽略表达式的其余部分

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 ( field = 'false' AND something LIKE '%string%' AND status_id IN ('1') )
OR status_id IN ('2') 
OR status_id IN ('3')
很明显,修复方法是在条件中的三个
周围使用括号:

WHERE field = 'false'
AND something LIKE '%string%'
AND ( status_id IN ('1') OR status_id IN ('2')  OR status_id IN ('3') )