0Pricing
Coding Interview Prep · Lektion

SELF JOIN für Hierarchien

Eine Tabelle mit sich selbst verknüpfen, um Beziehungen zwischen Mitarbeitenden und Vorgesetzten sowie zwischen Eltern und Kindern abzubilden

SELF JOIN für Hierarchien ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Was ein SELF JOIN wirklich ist

Ein Self-Join ist einfach ein Join, bei dem eine Tabelle auf beiden Seiten vorkommt. Es gibt kein spezielles SELF JOIN-Schlüsselwort; Sie schreiben einen normalen INNER- oder LEFT JOIN und verweisen zweimal auf dieselbe Tabelle.

Der entscheidende Trick sind Tabellenaliase. Sie geben jeder Kopie einen anderen Alias, damit die Engine sie als zwei unabhängige Tabellen behandelt.

SELECT e.name, m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;

Warum Aliase unverzichtbar sind

Ohne unterschiedliche Aliase ist die Abfrage mehrdeutig: Jeder Spaltenname kommt zweimal vor, und die Engine kann nicht erkennen, welche Kopie Sie meinen. Das Aliasieren jeder Instanz löst dieses Problem.

Lesen Sie den Join so: „Ordnen Sie jeder Mitarbeiterzeile die Mitarbeiterzeile zu, die ihr Manager ist.“ Der Alias e steht für den Mitarbeiter, m für den Manager, und beide stammen aus derselben physischen Tabelle.

-- e = the employee, m = that employee's manager
SELECT e.id, e.name, m.name AS reports_to
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;

Das Mitarbeiter-Manager-Modell

Das klassische Szenario für einen Self-Join ist eine Adjazenzliste: Eine einzelne Tabelle speichert Zeilen, und jede Zeile verweist über einen Fremdschlüssel auf ihre übergeordnete Zeile in derselben Tabelle.

Eine Tabelle employees mit einem manager_id, das auf employees.id verweist, bildet ein vollständiges Organigramm in einer einzigen Tabelle ab. Jeder Manager ist einfach eine weitere Mitarbeiterzeile.

-- One table holds the whole hierarchy
-- employees(id, name, manager_id)
-- manager_id -> employees.id

Alle Mitarbeitenden mit ihrem Manager auflisten

Die am häufigsten gestellte Frage zu Self-Joins: Zeigen Sie jede Mitarbeiterzeile neben dem Namen ihres Managers. Verknüpfen Sie die Mitarbeiterkopie mit der Managerkopie über e.manager_id = m.id.

Dies liefert eine Zeile für jeden Mitarbeiter, dessen Manager vorhanden ist. Beachten Sie, dass die oberste Ebene der Organisation, der CEO, eine NULL-manager_id hat und bei einem Inner Join ausgeschlossen wird.

SELECT e.name AS employee, m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;

Mit LEFT JOIN die Spitze des Baums behalten

Um den CEO einzubeziehen, dessen manager_id NULL ist, wechseln Sie zu einem LEFT JOIN. Die Mitarbeiterseite bleibt erhalten; die Manager-Spalten werden für Zeilen ohne übergeordneten Datensatz als NULL zurückgegeben.

Interviewer verwenden dies, um zu prüfen, ob Sie daran denken, dass ein innerer Self-Join Wurzelknoten entfernt. Die Lösung ist dieselbe wie bei jeder Situation mit einem äußeren Join, in der nicht zugeordnete Zeilen erhalten bleiben sollen.

SELECT e.name AS employee,
       COALESCE(m.name, '(top level)') AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Direkte Unterstellte pro Manager zählen

Eine häufige Anschlussfrage: Wie viele Personen unterstehen jedem Manager direkt? Führen Sie einen Self-Join durch und gruppieren Sie anschließend nach dem Manager.

Wir verknüpfen Mitarbeiter mit Managern, gruppieren nach der Identität des Managers und zählen die Mitarbeiter. Dabei werden nur direkte Unterstellte gezählt, nicht der gesamte darunterliegende Teilbaum.

SELECT m.name AS manager, COUNT(*) AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.id, m.name
ORDER BY direct_reports DESC;

Zwei Ebenen tief gehen

Um einen Mitarbeiter, seinen Manager und den Manager seines Managers zu erhalten, verketten Sie drei Kopien der Tabelle. Jede Ebene ist ein weiterer Self-Join.

Das funktioniert für eine feste, bekannte Tiefe. Wenn Sie eine beliebige Tiefe benötigen, reicht ein Self-Join nicht aus. Das ist das Signal für ein rekursives CTE, das Interviewer von Ihnen erwarten zu erwähnen.

SELECT e.name AS employee,
       m.name AS manager,
       g.name AS grand_manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
LEFT JOIN employees g ON m.manager_id = g.id;

Self-Join vs. rekursives CTE

Die zentrale Unterscheidung, die Interviewer prüfen:

  • Ein Self-Join verarbeitet eine feste Anzahl von Ebenen. Drei Kopien ergeben drei Ebenen, nicht mehr.
  • Ein rekursives CTE verarbeitet eine unbegrenzte Tiefe, indem es die Tabelle wiederholt mit sich selbst verknüpft, bis keine neuen Zeilen mehr erscheinen.

„Jeden Mitarbeiter und seinen direkten Manager anzeigen“ ist also ein Self-Join, aber „alle Vorfahren entlang der Kette auflisten“ erfordert Rekursion.

Übergeordnete und untergeordnete Kategorien

Dasselbe Muster bildet jeden Baum ab: Produktkategorien, Kommentarthreads oder geografische Regionen. Eine Tabelle categories mit einem parent_id, das auf die eigene id verweist, hat genau dieselbe Struktur wie der Fall mit Mitarbeitern und Managern.

Die Erkenntnis, dass „eine Tabelle mit einem selbstreferenzierenden Fremdschlüssel“ gleichbedeutend mit „Self-Join oder Rekursion“ ist, lässt sich vielseitig wiederverwenden.

SELECT c.name AS category,
       p.name AS parent_category
FROM categories c
LEFT JOIN categories p ON c.parent_id = p.id;

Häufige Fehler bei Self-Joins

Achten Sie in Vorstellungsgesprächen auf Folgendes:

  • Aliase vergessen, wodurch Fehler wegen mehrdeutiger Spalten entstehen.
  • INNER JOIN verwenden und dadurch stillschweigend Wurzelzeilen mit NULL-Eltern entfernen.
  • In der falschen Richtung verknüpfen: e.id = m.manager_id statt e.manager_id = m.id.

Sagen Sie immer laut, welcher Alias das untergeordnete und welcher das übergeordnete Element bezeichnet, bevor Sie die ON-Klausel schreiben.

Wann Sie einen Self-Join verwenden sollten

Greifen Sie immer dann zu einem Self-Join, wenn eine Tabelle Zeilen mit anderen Zeilen derselben Tabelle in Beziehung setzt:

  • Hierarchien mit genau einer festen Nachschlageebene (Mitarbeiter zu Manager).
  • Paare bilden oder Zeilen einer Tabelle vergleichen (Thema der nächsten Lektion).

Wenn die Beziehung rekursiv und unbegrenzt ist, nennen Sie ein rekursives CTE als das geeignetere Werkzeug. Diese Feinheit unterscheidet Einsteiger von Entwicklern auf mittlerem Niveau.

Kurzer Test

Testen Sie Ihr Verständnis von Self-Joins in Hierarchien.

Zusammenfassung: SELF JOIN für Hierarchien

Die wichtigsten Erkenntnisse:

  • Ein Self-Join ist ein normaler Join mit derselben Tabelle auf beiden Seiten, unterschieden durch Aliase.
  • Eine Adjazenzliste (ein selbstreferenzierender Fremdschlüssel wie manager_id) bildet einen Baum in einer einzigen Tabelle ab.
  • Verwenden Sie INNER JOIN für passende Paare und LEFT JOIN, um Wurzelzeilen mit NULL-Eltern zu behalten.
  • Self-Joins verarbeiten eine feste Tiefe; für eine unbegrenzte Traversierung benötigen Sie ein rekursives CTE.

Häufig gestellte Fragen

Ist die Lektion „SELF JOIN für Hierarchien“ kostenlos?

Ja — der vollständige Text von „SELF JOIN für Hierarchien“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „SELF JOIN für Hierarchien“?

Eine Tabelle mit sich selbst verknüpfen, um Beziehungen zwischen Mitarbeitenden und Vorgesetzten sowie zwischen Eltern und Kindern abzubilden Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Coding Interview Prep zu starten?

Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „SELF JOIN für Hierarchien“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?

Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. CROSS JOIN und kartesische Produkte
  2. SELF JOIN für Hierarchien
  3. Zeilen innerhalb einer Tabelle vergleichen
  4. Den passenden JOIN-Typ auswählen
← Zurück zu Coding Interview Prep