capypad
0 Tage Serie
sql / expert
Snippet

Rekursive CTEs für die hierarchische Baum-Traversierung

Rekursive Common Table Expressions (CTEs) ermöglichen es SQL, hierarchische Datenstrukturen wie Organigramme oder Dateisysteme abzufragen. Das 'Anchor-Member' definiert den Startpunkt (z.B. den CEO), während das 'Recursive-Member' die CTE wieder mit der Basistabelle verknüpft, um Untergeordnete zu finden und die Tiefe zu erhöhen, bis keine Beziehungen mehr bestehen.

snippet.sql
sql
1
2
3
4
5
6
7
8
9
10
WITH RECURSIVE organizational_chart AS (
SELECT id, manager_id, name, 1 AS depth
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.manager_id, e.name, oc.depth + 1
FROM employees e
JOIN organizational_chart oc ON e.manager_id = oc.id
)
SELECT * FROM organizational_chart ORDER BY depth, name;
Erklärung
1
WITH RECURSIVE organizational_chart AS (
Initialisiert die rekursive CTE-Struktur.
2
SELECT id, manager_id, name, 1 AS depth FROM employees WHERE manager_id IS NULL
Das Anchor-Member: Wählt den Wurzelknoten aus, der keinen Vorgesetzten hat.
3
UNION ALL
Verbindet die Anker-Ergebnisse mit den nachfolgenden rekursiven Iterationen.
4
JOIN organizational_chart oc ON e.manager_id = oc.id
Der rekursive Schritt: Verknüpft die Tabelle mit dem vorherigen Ergebnissatz, um die nächste Ebene zu finden.