In SQL verknüpft der Self Join verschiedene Zeilen innerhalb einer Tabelle miteinander.

SELECT Spalte
FROM TabelleA 
[LEFT/INNER] JOIN TabelleA AS TabelleB 
ON TabelleA.SpalteA = TabelleB.SpalteB; 
SQL Self Join

Der SQL Self Join verknüpft eine Tabelle mit sich selbst. In der Praxis wird der Self Join genutzt, wenn Zeilen mit anderen Zeilen aus derselben Tabelle zusammenhängen. Anders als die anderen JOINs hat der Self Join kein eigenes Keyword. 

Für Self Join können LEFT JOIN oder INNER JOIN verwendet werden. Für einen Join werden zwei Tabellen benötigt, im Self Join steht uns allerdings nur eine Tabelle zur Verfügung. Daher wird dieselbe Tabelle über einen Alias in zwei verschiedene Tabellen aufgeteilt: TabelleA und TabelleB. Es ist sinnvoll erst die Tabellen zu benennen und erst dann die Spalten auszuwählen, um den Überblick zu behalten. Daraufhin wird SpalteA von TabelleA mit SpalteB von TabelleB abgeglichen.

Nach der SELECT Anweisung können die Spalten ausgewählt werden, die wiedergegeben werden sollen. Dafür wird erst die Tabelle ausgewählt und dann die Spalte, um zu differenzieren, welcher Eintrag aus welcher Tabelle stammt. Es kann zu Verwechslungen kommen, wenn zwei Mal dieselbe Spalte auftritt:

SELECT TabelleA.SpalteC, TabelleB.SpalteC 
FROM Tabelle 
[LEFT/INNER] JOIN Tabelle AS TabellB 
ON TabelleA.SpalteA = TabelleB.SpalteB; 

SELF JOIN - Beispiel

In der Angestelltentabelle einer großen Unternehmensberatung sind sowohl normale Berater als auch ihre Manager aufgelistet. Jeder der Mitarbeiter besitzt eine Manager_ID, welche auf die Angestellten_ID der Mitarbeiter verweist. Um nun die Spalte für den Namen des Managers in dieselbe Zeile hinzuzufügen, eignet sich der SELF JOIN:

Angestellte

Angestellten_ID

Vorname

Nachname

Manager_ID

1

Max

Mustermann

150

150

Erika

Musterfrau

210

210

Frauke

Herrmann

(null)

SELECT Ang.Vorname, Ang.Nachname Ang.Manager_ID, 
       Man.Vorname, Man.Nachname 
FROM Angestellte AS Ang 
LEFT JOIN Angestellte AS Man
ON Ang.Manager_ID = Man.Angestellten_ID; 

Darauf werden die Spalten Vorname und Nachname für die jeweiligen Manager hinzugefügt. Um diese Spaltennamen von den Vor- und Nachnamen der Angestellten zu unterscheiden, wurden Aliases verwendet. Ang.Vorname bezieht sich auf die Vornamen der Angestellten und Man.Vorname bezieht sich auf die Vornamen der jeweils passenden Manager.

Angestellte

Angestellten_ID

Vorname

Nachname

Manager_ID

Vorname

Nachname

1

Max

Mustermann

150

Erika

Musterfrau

150

Erika

Musterfrau

210

Frauke

Hermann

210

Frauke

Herrmann

(null)

(null)

(null)

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!