当满足一个条件或另一个条件时使用SQL select语句,但不同时满足两个条件。

9

给定以下表:

id      column1   column2
-------------------------
1       3         8
2       4         7
3       4         10
4       4         14
5       14        17
6       10        27
7       14        21
8       16        14
9       21        4
10      30        3

当选择列 column1 或者 column2 中的数字 4 和 14 时,查询选取行的最佳方式是什么,但要排除同时存在数字 4 和 14 的行。请注意,顺序可以颠倒。

期望输出:

id      column1   column2
-------------------------
2       4         7
3       4         10
5       14        17
7       14        21
8       16        14
9       21        4

如果 column1column2 持有值为 4 或 14 的相同数值,会发生什么?另外,使用哪个数据库? - Bacs
7个回答

13
SELECT * FROM table WHERE (column1=4 XOR column2=14) XOR (column1=14 XOR column2=4)  

1
不错。看起来这确实是一个好问题。 - Alfonso Fernandez-Ocampo
3
简单的解决方案,我并不是要贬低它,但如果没有指定数据库平台,我不确定是否适当。例如,在Oracle上这种方法行不通。 - Bacs

2

试试这个:

SELECT *
FROM mytable
WHERE ((column1 = 4 AND column2 != 14)
OR    (column2 = 14 AND column1 != 4)
OR    (column1 = 14 AND column2 != 4)
OR    (column2 = 4 AND column1 != 14))

1
SELECT id, column1, column2
FROM table
WHERE column1 in ('4','14') AND column2 NOT IN ('4','14')
OR column2 in ('4','14') AND column1 NOT IN ('4','14')

1

不知道是否是最好的方法,但这应该可以解决问题:

SELECT * FROM t
WHERE (
    column1 IN (4,14)
        AND
    column2 NOT IN (4,14)
) OR (
    column1 NOT IN (4,14)
        AND
    column2 IN (4,14)
)

0
with cte as(
    SELECT * FROM t WHERE column1 in(4,14) or column2 in(4,14)
)
SELECT * FROM t WHERE (column1 in(4,14) or column2 in(4,14)) and id not in(select id from cte where column1 in(4,14) and column2 in(4,14))

0

查询 t 表中 column1 包含 4 或 14,或者 column2 包含 4 或 14 的所有数据,但排除同时 column1 包含 4 或 14 且 column2 包含 4 或 14 的数据。


0

从表中选择 *, where (column1=4 或 column2=14) 且 非 (column1=4 和 column2=14);


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接