Menu
CoddyTech

Eine Hierarchie durchlaufen

Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy. Lektion 21 von 27.

Der eigentliche Grund für rekursive CTEs: eine Eltern-Kind-Beziehung durchlaufen, die in einer einzigen Tabelle gespeichert ist. Angenommen, employees hat eine Spalte manager_id, die auf dieselbe Tabelle verweist:

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- Anker: der Mitarbeiter, bei dem die Suche beginnt
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- rekursiv: zum Vorgesetzten wechseln
)
SELECT * FROM chain

Jeder Schritt verknüpft die CTE wieder mit employees und geht im Baum eine Ebene nach oben. Die Rekursion endet auf natürliche Weise, wenn eine Zeile keinen Vorgesetzten hat (JOIN findet keine Übereinstimmung).

challenge icon

Aufgabe

Mittel

Verfügbare Tabellen und Spalten:

  • categories: id, name, parent_id

Jede Kategorie hat eine optionale parent_id, die auf eine andere Kategorie verweist. Gib alle Kategorien zurück, die Nachkommen der Kategorie id = 1 sind (ihre Kinder, Enkelkinder, …), aber nicht Kategorie 1 selbst. Gib id und name zurück, sortiert nach id.

Probier es selbst

WITH RECURSIVE descendants AS (
    -- Anker: direkte Kinder von id 1
    -- rekursiv: deren Kinder usw.
)
SELECT id, name FROM descendants ORDER BY id
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Über die Grundlagen hinaus

Übe selbstständig: SQL-Playground