鉴于查询'SELECT foo FROM bar WHERE a = x AND b = y OR c = z'
,它如何解析此查询?
(a = x AND b = y) OR c = z
?
a = x AND (b = y OR c = z)
?
这是一个简单的例子,但如果您将更多搜索条件与AND / OR混合和匹配呢?
答案 0 :(得分:5)
(a = x AND b = y)OR c = z
http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
答案 1 :(得分:3)
正如已经回答的那样,AND
将具有优先权并首先被解析。
我认为你真正想要的答案是:不要写SELECT foo FROM bar WHERE a = x AND b = y OR c = z
之类的查询。
如果您的意思是SELECT foo FROM bar WHERE ((a = x AND b = y) OR c = z)
或者您打算SELECT foo FROM bar WHERE (a = x AND (b = y OR c = z))
,那么请从头开始写。
当您在下周(或月份或年份)再次查看查询时,它将帮助您解决问题,并且它将使未来的维护者更容易。
答案 2 :(得分:1)
AND更高precedence。
答案 3 :(得分:0)
来自MySQL手册第11.2.1节。运算符优先级:http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
AND优先于OR。 (a = x AND b = y)或者c = z是等效表达式。