SQL:AND / OR语句的序列

时间:2013-10-23 15:40:48

标签: mysql sql sql-server

我正在尝试解决的问题:where语句,其中查询检查条件1是否为A或B WHILE条件2不是C,D在同一行中。

WHERE Condition1 LIKE 'A' OR Condition1 LIKE 'B' AND "Condition2" <> 'C' AND "Condition2" <> 'D'

这是否接近?非常感谢!

2 个答案:

答案 0 :(得分:2)

您走在正确的轨道上,但您错过了AND的优先级高于OR的事实。 我能想到的最优雅的方式来表达你想要的条件如下:

SELECT *
FROM   some_table
WHERE  c1 IN ('A', 'B') AND c2 NOT IN ('C', 'D');   

答案 1 :(得分:2)

您应该将子表达式分组在括号中,否则您可能会围绕组合在一起的模糊性冒险:

WHERE
    (Condition1 = 'A' OR Condition1 = 'B')
    AND
    (Condition2 <> 'C' AND Condition2 <> 'D')

在这种情况下,确实需要围绕第二部分的括号,但是永远不会同时结合AND和{{1}在同一个子表达式中。

原始构造可能存在的问题是表达式可以这样分组:

OR