Eine Hierarchie durchlaufen
Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy. Lektion 21 von 27.
Der eigentliche Grund, warum rekursive CTEs existieren: das Durchlaufen einer in einer einzelnen Tabelle gespeicherten Eltern-Kind-Beziehung. Angenommen, employees verfügt über eine Spalte manager_id, die auf dieselbe Tabelle zurückverweist:
WITH RECURSIVE chain AS (
SELECT id, name, manager_id
FROM employees WHERE id = 7 -- Anker: der startende Mitarbeiter
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN chain c ON e.id = c.manager_id -- rekursiv: zum Manager springen
)
SELECT * FROM chainJeder Schritt verbindet die CTE wieder mit employees und steigt im Baum eine Ebene nach oben. Die Rekursion endet automatisch, 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, nach id sortiert.
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