Rekursive CTEs für Hierarchien
Durchlaufen Sie hierarchische Daten (Organigramme, verschachtelte Kommentare, Graphtraversierung) mit WITH RECURSIVE und Abbruchbedingungen.
Rekursive CTEs für Hierarchien ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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 SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum rekursiv?
Mit einfachem SQL lässt sich ein Baum mit unbekannter Tiefe nicht durchlaufen: Eltern von Eltern, Kinder von Kindern. Rekursive CTEs sind die Standard-SQL-Lösung dafür.
Aufbau
Eine rekursive CTE besteht aus zwei Teilen, die durch UNION ALL verbunden werden:
WITH RECURSIVE name AS (
-- 1. Anchor query: seed rows
SELECT ...
UNION ALL
-- 2. Recursive step: references the CTE itself
SELECT ...
FROM name JOIN ...
)
SELECT * FROM name;Eine Organisationsstruktur durchlaufen
Ermitteln Sie alle Mitarbeitenden, die direkt oder indirekt einer bestimmten Führungskraft unterstellt sind:
WITH RECURSIVE reports AS (
-- anchor: the manager themself
SELECT id, full_name, manager_id, 0 AS depth
FROM employees WHERE id = 42
UNION ALL
-- recurse: people whose manager is in reports
SELECT e.id, e.full_name, e.manager_id, r.depth + 1
FROM employees e
JOIN reports r ON r.id = e.manager_id
)
SELECT * FROM reports ORDER BY depth, full_name;Verschachtelte Kommentare
Durchlaufen Sie einen Diskussionsbaum ausgehend von einer Wurzel:
WITH RECURSIVE thread AS (
SELECT id, parent_id, body, 0 AS depth, ARRAY[id] AS path
FROM comments WHERE id = $1
UNION ALL
SELECT c.id, c.parent_id, c.body, t.depth + 1, t.path || c.id
FROM comments c
JOIN thread t ON c.parent_id = t.id
)
SELECT * FROM thread ORDER BY path;Beendigung
Die Rekursion endet, wenn der rekursive Schritt keine neuen Zeilen zurückgibt.
Endlosschleifen vermeiden
Wenn Ihr Graph Zyklen enthält, verfolgen Sie bereits besuchte Knoten:
WITH RECURSIVE walk AS (
SELECT id, ARRAY[id] AS path FROM nodes WHERE id = $1
UNION ALL
SELECT e.target_id, w.path || e.target_id
FROM edges e
JOIN walk w ON e.source_id = w.id
WHERE e.target_id <> ALL(w.path)
)
SELECT * FROM walk;Numerische Reihe
Rekursive CTEs können auch Sequenzen erzeugen:
WITH RECURSIVE n(i) AS (
VALUES (1)
UNION ALL
SELECT i + 1 FROM n WHERE i < 100
)
SELECT i, i*i AS square FROM n;Stückliste
Entfalten Sie ein Produkt in alle Bestandteile, einschließlich Unterbaugruppen:
WITH RECURSIVE bom AS (
SELECT part_id, sub_part_id, qty FROM parts WHERE part_id = $1
UNION ALL
SELECT p.part_id, p.sub_part_id, p.qty * bom.qty
FROM parts p
JOIN bom ON bom.sub_part_id = p.part_id
)
SELECT sub_part_id, SUM(qty) AS total_qty FROM bom GROUP BY sub_part_id;Tiefenbegrenzungen
Begrenzen Sie die Rekursion aus Sicherheitsgründen:
WITH RECURSIVE tree AS (
SELECT id, parent_id, 0 AS depth FROM nodes WHERE id = $1
UNION ALL
SELECT n.id, n.parent_id, t.depth + 1
FROM nodes n JOIN tree t ON n.parent_id = t.id
WHERE t.depth < 10
)
SELECT * FROM tree;UNION vs. UNION ALL
UNION ALL ist normalerweise die richtige Wahl. UNION entfernt Duplikate — nützlich, wenn ein Knoten auf mehreren Wegen erreicht werden kann.
Leistung
Rekursive CTEs werden iterativ ausgewertet. Die „Arbeitstabelle“ jedes Schritts besteht aus den Zeilen, die der vorherige Schritt erzeugt hat. Indizieren Sie die Join-Spalten.
Zusammenfassung
Rekursive CTEs durchlaufen Hierarchien und Graphen.
- Anker + UNION ALL + rekursiver Schritt
- Endet, wenn der rekursive Schritt keine Zeilen zurückgibt
- Verwenden Sie ein Pfad-Array, um Zyklen zu durchbrechen
Kurze Überprüfung
Welches Schlüsselwort macht eine CTE rekursiv?
Häufig gestellte Fragen
Ist die Lektion „Rekursive CTEs für Hierarchien“ kostenlos?
Ja — der vollständige Text von „Rekursive CTEs 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 SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Rekursive CTEs für Hierarchien“?
Durchlaufen Sie hierarchische Daten (Organigramme, verschachtelte Kommentare, Graphtraversierung) mit WITH RECURSIVE und Abbruchbedingungen. Du übst SQL Academy 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 SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy 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 4 von 4.
Wie lange dauert die Lektion „Rekursive CTEs 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 SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-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
- Skalare, Zeilen- und Tabellenunterabfragen
- Korrelierte und nicht korrelierte Unterabfragen
- Common Table Expressions (WITH)
- Rekursive CTEs für Hierarchien