capypad
0 Tage Serie
sql / expert
Snippet

Rekursive Hierarchietraversal

Rekursive Common Table Expressions (CTEs) ermöglichen das Durchlaufen von selbstreferenzierenden Beziehungen, wie Organigrammen oder Stücklisten, die ansonsten mit einer festen Anzahl von Joins unmöglich abzufragen wären. Das Anker-Element definiert den Startpunkt, und das rekursive Element bezieht sich auf die CTE selbst, um die Ergebnismenge iterativ aufzubauen.

snippet.sql
sql
1
2
3
4
5
6
7
8
9
10
WITH RECURSIVE subordinates AS (
SELECT id, manager_id, name
FROM employees
WHERE name = 'Alice'
UNION ALL
SELECT e.id, e.manager_id, e.name
FROM employees e
INNER JOIN subordinates s ON s.id = e.manager_id
)
SELECT * FROM subordinates;
Erklärung
1
WITH RECURSIVE subordinates AS (
Beginnt die rekursive CTE-Definition und benennt die temporäre Ergebnismenge.
2
SELECT id, manager_id, name FROM employees WHERE name = 'Alice'
Das Anker-Element: wählt die erste Zeile aus, um die Rekursion zu starten.
3
UNION ALL
Verbindet das Anker-Ergebnis mit den Ergebnissen der folgenden rekursiven Iterationen.
4
SELECT e.id, e.manager_id, e.name FROM employees e
Das rekursive Element: wählt Kandidaten für die nächste Ebene der Hierarchie aus.
5
INNER JOIN subordinates s ON s.id = e.manager_id
Die Join-Bedingung, die neue Zeilen mit den bereits entdeckten Untergebenen verknüpft.