0Pricing
SQL Academy · Lektion

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

  1. Skalare, Zeilen- und Tabellenunterabfragen
  2. Korrelierte und nicht korrelierte Unterabfragen
  3. Common Table Expressions (WITH)
  4. Rekursive CTEs für Hierarchien
← Zurück zu SQL Academy