我要解决的问题:查询检查条件 1 是否为 A 或 B 而条件 2 不是 C、D 在同一行中的 Where 语句。
WHERE Condition1 LIKE 'A' OR Condition1 LIKE 'B' AND "Condition2" <> 'C' AND "Condition2" <> 'D'
这很近吗?非常感谢!
我要解决的问题:查询检查条件 1 是否为 A 或 B 而条件 2 不是 C、D 在同一行中的 Where 语句。
WHERE Condition1 LIKE 'A' OR Condition1 LIKE 'B' AND "Condition2" <> 'C' AND "Condition2" <> 'D'
这很近吗?非常感谢!
您走在正确的轨道上,但是您错过了AND
优先级高于OR
. 我能想到的表达您想要的条件的最优雅的方式如下:
SELECT *
FROM some_table
WHERE c1 IN ('A', 'B') AND c2 NOT IN ('C', 'D');
您应该在括号中对子表达式进行分组,否则您将冒着对组合在一起的内容产生歧义的风险:
WHERE
(Condition1 = 'A' OR Condition1 = 'B')
AND
(Condition2 <> 'C' AND Condition2 <> 'D')
在这种情况下,您实际上并不需要第二部分周围的括号,但是您永远不应该在同一个子表达式中将两者结合起来AND
。OR
原始构造的一个可能问题是表达式可以这样分组:
WHERE
Condition1 = 'A'
OR
(Condition1 = 'B' AND Condition2 <> 'C' AND Condition2 <> 'D')