capypad
0 Tage Serie
sql / expert
Snippet

Hierarchische Traversierung mit rekursiven CTEs

Rekursive Common Table Expressions (CTEs) ermöglichen das Abfragen hierarchischer Datenstrukturen, wie Organigramme oder Stücklisten, indem eine Tabelle iterativ mit sich selbst verknüpft wird, bis eine Abbruchbedingung erfüllt ist.

snippet.sql
sql
1
2
3
4
5
6
7
8
9
10
WITH RECURSIVE employee_path 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, ep.depth + 1
FROM employees e
INNER JOIN employee_path ep ON e.manager_id = ep.id
)
SELECT * FROM employee_path ORDER BY depth, name;
Erklärung
1
WITH RECURSIVE employee_path AS (
Definiert den Beginn des rekursiven Abfrageblocks.
2
SELECT ... WHERE manager_id IS NULL
Das Anker-Mitglied: selektiert die Wurzelknoten der Hierarchie.
3
UNION ALL
Verbindet das Anker-Mitglied mit dem rekursiven Mitglied.
4
INNER JOIN employee_path ep ON e.manager_id = ep.id
Das rekursive Mitglied: verknüpft die Tabelle erneut mit der Ergebnismenge, um Nachfolger zu finden.