问题描述
我觉得自己很愚蠢,因为这应该有一个简单的答案。也许我需要更多的咖啡。
想象以下 Oracle 表:
行 | ID1 | ID2 |
---|---|---|
1 | B | B |
2 | B | A |
3 | C | A |
4 | C | B |
5 | D | A |
6 | D | B |
7 | E | A |
如何选择所有行除了 ID1 = E,以及 ID2 = A 和 ID1 = B 或 C 的行(意味着我想要所有 ID1 = D,但对于 ID1 = B 或 C ,删除 ID2 = A)。 我可以用很多 OR 来做到这一点,但有没有更好的方法?
解决方法
如何选择除 ID1 = E 之外的所有行,以及 ID2 = A 和 ID1 = B 或 C 的行(
这是布尔逻辑。您可以使用:
where not (id1 = 'E' or (ID2 = 'A' and ID1 IN ('B','C')))