2014-11-25 35 views
6

假設表格如下:SQL選擇但不能同時

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 

什麼是最好的方式來查詢時,4號和14 column1column2選擇選擇行,但不包括當數字4和數字14都在行中。請注意訂單可以顛倒。

預期輸出

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

如果'column1'和'column2'具有4或14的相同值,會發生什麼?另外,什麼數據庫? – Bacs 2014-11-25 08:58:31

回答

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

不錯的一個。看起來這個答案似乎確實是一個很好的問題 – 2014-11-25 09:20:01

+2

簡單的解決方案,我並不是說要減損這一點,但我不確定我會認爲它是適當的,因爲沒有指定數據庫平臺。例如,這對Oracle不起作用。 – Bacs 2014-11-25 09:27:40

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) 
) 
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)) 
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

SELECT * FROM噸WHERE COLUMN1在(4,14)或列2中(4,14) 除了 SELECT * FROM噸WHERE COLUMN1在(4,14)和列2中(4,14)