給定以下兩個表,如何編寫一個查詢,該查詢只顯示兩個表中不存在的行的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
給定以下兩個表,如何編寫一個查詢,該查詢只顯示兩個表中不存在的行的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
假設你的意思是「在一個表或其它表中存在,但不是在兩個表」 - 您使用子查詢和工會選擇!
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;
這將是簡單的如果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
是,工會是從平衡的,任何人都關心解釋爲什麼這是downvoted的願望除了關鍵 – vicatcu 2010-12-13 18:45:48
? – 2010-12-13 18:58:14