SELF JOIN
Joins & Mengen
Bedeutung
Ein SELF JOIN ist ein Join einer Tabelle mit sich selbst. Das klingt zunächst seltsam, ist aber praktisch, wenn Zeilen derselben Tabelle miteinander in Beziehung stehen – etwa um Kunden aus derselben Stadt zu paaren oder hierarchische Daten (Mitarbeiter und Vorgesetzte) auszuwerten.
Syntax
Technisch ist ein SELF JOIN ein ganz normaler Join. Der Trick: Du gibst der Tabelle zwei verschiedene Aliase, damit die Datenbank die beiden „Kopien“ unterscheiden kann.
SELECT a.spalte, b.spalte FROM tabelle a JOIN tabelle b ON a.schluessel = b.schluessel WHERE a.id <> b.id;
Beispiel: Kundenpaare aus derselben Stadt
Wir wollen alle Paare von Kunden finden, die in derselben Stadt sitzen:
SELECT a.Name AS Kunde1, b.Name AS Kunde2, a.Stadt FROM Kunden a JOIN Kunden b ON a.Stadt = b.Stadt WHERE a.KundenID < b.KundenID;
| Kunde1 | Kunde2 | Stadt |
|---|---|---|
| Müller GmbH | Becker KG | Berlin |
Sowohl Müller GmbH als auch Becker KG sitzen in Berlin – sie bilden ein Paar.
Warum die WHERE-Bedingung?
a.KundenID = b.KundenIDwürde jeden Kunden mit sich selbst paaren – das verhindern wir.a.KundenID < b.KundenID(statt<>) sorgt zusätzlich dafür, dass jedes Paar nur einmal erscheint und nicht zusätzlich in umgekehrter Reihenfolge.
Stolperfalle
Ohne unterschiedliche Aliase weiß die Datenbank nicht, welche Kopie der Tabelle du meinst – die Abfrage schlägt fehl oder liefert mehrdeutige Spalten. Vergisst du die Bedingung gegen die Selbst-Paarung, stehen alle Kunden auch mit sich selbst im Ergebnis.