SQL选择满足一个条件或另一个条件但不同时满足两个条件

时间:2014-11-25 08:49:13

标签: sql select

鉴于下表:

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

column1column2中选择数字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

6 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分: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))

答案 2 :(得分: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')

答案 3 :(得分: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)
)

答案 4 :(得分: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))

答案 5 :(得分:0)

SELECT * FROM t WHERE(1,14)中的column1或(4,14)中的column2 除了 SELECT * FROM t WHERE(4,14)中的column1和(4,14)中的column2