做到這一點的方法是使用一個FULL OUTER JOIN,但由於這是不是在MySQL的支持,您可以改用組合一個左加入和內部加入和右加入。
(
SELECT A.Id, A.Name, 'A' AS Found
FROM A LEFT JOIN B ON A.Name = B.Name
WHERE B.Name IS NULL
)
UNION ALL
(
SELECT B.Id, B.Name, 'B' AS Found
FROM A RIGHT JOIN B ON A.Name = B.Name
WHERE A.Name IS NULL
)
UNION ALL
(
SELECT A.Id, A.Name, 'C' AS Found
FROM A JOIN B ON A.Name = B.Name
)
其實,你只需要左右JOIN,因爲你可以處理INNER JOIN在同一時間,因爲你做的另外兩個連接之一。我覺得上面演示的原則更清晰,但在實踐中,以下將提供更好的性能:
SELECT A.Id, A.Name, IF(B.Name IS NULL, 'A', 'C') AS Found
FROM A LEFT JOIN B ON A.Name = B.Name
UNION ALL
SELECT B.Id, B.Name, 'B' AS Found
FROM A RIGHT JOIN B ON A.Name = B.Name
WHERE A.Name IS NULL
結果:
Id Name Found
1 Scott A
2 Dan C
3 Sam A
2 Andi B
3 Jess B
我覺得在結果中的'Id'欄應閱讀'4 Andi ... 5 Jess'。 – eykanal 2010-06-08 18:26:28