クエリ'SELECT foo FROM bar WHERE a = x AND b = y OR c = z'
が与えられた場合、このクエリはどのように解析されますか?MySQL論理演算子
(a = x AND b = y) OR c = z
?
a = x AND (b = y OR c = z)
?
これは簡単な例ですが、AND/ORとさらに多くの検索語を混在させて一致させるのはどうですか?
クエリ'SELECT foo FROM bar WHERE a = x AND b = y OR c = z'
が与えられた場合、このクエリはどのように解析されますか?MySQL論理演算子
(a = x AND b = y) OR c = z
?
a = x AND (b = y OR c = z)
?
これは簡単な例ですが、AND/ORとさらに多くの検索語を混在させて一致させるのはどうですか?
(= xおよびB = Y)OR C = Z
http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
AND precedence高いです。
MySQLマニュアルのセクション11.2.1。オペレータの優先順位:http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
ANDはORよりも優先されます。 (a = x AND b = y)OR c = zは同等の式です。
既に回答したように、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))
の場合は最初から書きます。
また、来週(または月、または年)にクエリを見たときにそれを把握する必要がなくなり、今後のメンテナにとっても簡単になります。
でも、もしあなたが a = b AND c = d OR e = f OR g = h AND i = j のようなものを持っていればどうでしょうか? – Matthew
かなり: (a = b AND c = d)OR e = f OR(g = h AND i = j) –