我想解决的问题:Where语句,其中查询检查条件1是A还是B而条件2不是C,D在同一行。SQL:AND/OR语句的顺序
WHERE Condition1 LIKE 'A' OR Condition1 LIKE 'B' AND "Condition2" <> 'C' AND "Condition2" <> 'D'
此内容是否有用?非常感谢!
我想解决的问题:Where语句,其中查询检查条件1是A还是B而条件2不是C,D在同一行。SQL:AND/OR语句的顺序
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')
@MartinSmith事实上 - 这应该是'c2' - 愚蠢的错字。谢谢你的收获! – Mureinik
当你添加“你的条件将做的伎俩”,我删除了我的upvote,这是不正确的,因为没有分组。 – Asaph
@Asaph - 事实上,你是对的 - 我错过了OP。好的赶上!我重申了我的答案,以解决这个错误。 – Mureinik