4

我要解决的问题:查询检查条件 1 是否为 A 或 B 而条件 2 不是 C、D 在同一行中的 Where 语句。

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

这很近吗?非常感谢!

4

2 回答 2

2

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

SELECT *
FROM   some_table
WHERE  c1 IN ('A', 'B') AND c2 NOT IN ('C', 'D');   
于 2013-10-23T15:43:25.307 回答
2

您应该在括号中对子表达式进行分组,否则您将冒着对组合在一起的内容产生歧义的风险:

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

在这种情况下,您实际上并不需要第二部分周围的括号,但是您永远不应该在同一个子表达式中将两者结合起来ANDOR

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

WHERE
    Condition1 = 'A'
    OR
    (Condition1 = 'B' AND Condition2 <> 'C' AND Condition2 <> 'D')
于 2013-10-23T15:44:02.977 回答