Способ сделать это состоит в использовании FULL OUTER JOIN, но так как это не поддерживается в MySQL вы можете вместо этого использовать комбинацию LEFT JOIN и INNER JOIN и RIGHT JOIN.
(
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
)
На самом деле, вам нужно только ВЛЕВО и RIGHT 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 Анди ... 5 Джесс. – eykanal