我有这个问题:
SELECT * FROM (`users`) WHERE `date_next_payment` <= '2011-02-02'
AND `status` = 'active' OR `status` = 'past due'
哪个没有返回正确的结果.但是,在OR条件周围添加括号使其工作如下:
SELECT * FROM (`users`) WHERE `date_next_payment` <= '2011-02-02'
AND (`status` = 'active' OR `status` = 'past due')
我的问题是它为什么不同?据我所知,在没有括号的情况下,OR语句会有所不同;但我不明白它是如何不同的.
我没有找到任何对此有帮助的文档.如果那里有任何链接,我真的很感激.
解决方法:
这是因为OR比AND低operator precedence.每当DB看到类似的表达式时
A AND B OR C
首先评估AND,即它等同于
(A AND B) OR C
所以,如果你明确想要
A AND (B OR C)
相反,你必须放入括号.
这不是特定于SQL的.这些运算符的优先顺序在我所知的所有编程语言中都是相同的(即至少是C,C,C#,Java和Unix shell脚本).
标签:sql,mysql
来源: https://codeday.me/bug/20190926/1819023.html