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
1
2
3
4
5
6
7
8
9
10
WITH RECURSIVE employee_path AS (SELECT id, manager_id, name, 1 AS depthFROM employeesWHERE manager_id IS NULLUNION ALLSELECT e.id, e.manager_id, e.name, ep.depth + 1FROM employees eINNER 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.