2010-12-13 64 views
2

給定以下兩個表,如何編寫一個查詢,該查詢只顯示兩個表中不存在的行的id ?查詢後MySQL:單個查詢只顯示兩個表中不存在id的行

 
table_one 
-------------- 
id | name 
4  | Jack 
5  | John 
6  | Henry 
8  | Frank 
9  | Bob 
 
table_two 
-------------- 
id | name 
4  | Jack 
6  | Henry 
8  | Frank 

輸出爲然:John Bob

回答

2

假設你的意思是「在一個表或其它表中存在,但不是在兩個表」 - 您使用子查詢和工會選擇!

SELECT name FROM table_one WHERE id NOT IN (SELECT id FROM table_two) 
UNION SELECT name from table_two WHERE id NOT IN (SELECT id FROM table_one); 

另外,如果你希望這些結果進行分組爲你成一個單一的結果行:

SELECT group_concat(x.name) FROM 
    (SELECT name FROM table_one 
     WHERE id NOT IN (SELECT id FROM table_two) 
    UNION SELECT name from table_two 
     WHERE id NOT IN (SELECT id FROM table_one)) as x; 
0

這將是簡單的如果MySQL有一個FULL OUTER JOIN操作:這樣的聯接返回的行對於每個表中的每條記錄,如果雙方都存在記錄,則在ID上加入,如果不存在,則在不存在方的空值。然後,您可以在連接的兩邊進行@ajreal所提供的相同檢查。

相反,你可以UNION左右的結果加入...

SELECT table_one.name 
FROM table_one 
LEFT JOIN table_two ON table_one.id = table_two.id 
WHERE table_two.id IS NULL 
UNION 
SELECT table_two.name 
FROM table_one 
RIGHT JOIN table_two ON table_one.id = table_two.id 
WHERE table_one.id IS NULL 
+0

是,工會是從平衡的,任何人都關心解釋爲什麼這是downvoted的願望除了關鍵 – vicatcu 2010-12-13 18:45:48

+0

? – 2010-12-13 18:58:14