MySQL: Fehlende Einträge finden

Hin und wieder sucht man in zwei ähnlichen Tabellen nach fehlenden Einträgen. Das kommt beispielsweise vor, wenn wir zwei unterschiedliche Versionsstände einer Tabelle haben und diese vergleichen wollen. Nehmen wir an wir haben zwei Tabellen.

Tabelle „A“:

ID DESCRIPTION
1 Name1
2 Name2
4 Name4

Tabelle „B“:

ID DESCRIPTION
1 Name1
3 Name3
4 Name4

Bei einem Microsoft SQL Server würde man jetzt mit full outer join arbeiten:

SELECT A.ID as A1, B.ID as B1 
FROM A FULL OUTER JOIN B ON A.ID = B.ID
WHERE A.ID is null OR B.ID is null;

Als Ergebnis bekämen wir  hier zwei Zeilen und wüssten dann, dass in B die ID 2 fehlt und in A die ID 3.

A1 B1
2 null
null 3

Leider gibt es das bei MySQL nicht direkt, weil bei diesem Datenbankserver  „full outer join“ nicht unterstützt wird. Man muss also statt „full outer join“ den Ausdruck in zwei Teile mit zwei „joins“ aufteilen:

SELECT A.ID as A1, B.ID as B1 
FROM A LEFT OUTER JOIN B 
ON A.ID = B.ID
WHERE B.ID is null
UNION 
SELECT A.ID as A1, B.ID as B1
FROM A RIGHT OUTER JOIN B 
ON A.ID = B.ID
WHERE A.ID is null;

Hier ist eine nette Seite, die das Thema auch beschreibt:
http://www.peterkropff.de/site/mysql/full_outer_join.htm

Cheers,
Ralf

Comments are closed.