MySQL逻辑运算符

时间:2009-03-27 17:40:55

标签: mysql

鉴于查询'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混合和匹配呢?

4 个答案:

答案 0 :(得分:5)

答案 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是等效表达式。