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
1
2
3
4
5
6
7
8
9
10
WITH RECURSIVE subordinates AS (SELECT id, manager_id, nameFROM employeesWHERE name = 'Alice'UNION ALLSELECT e.id, e.manager_id, e.nameFROM employees eINNER 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.