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 chainJeder 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).
Aufgabe
MittelVerfü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
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