SQL: Beziehung zwischen Kind/Eltern und Großeltern ausdrücken

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



SQL-Dialekte, die Common Table Expressions (CTE) unterstützen, können diese zum Bilden der Abfrage verwenden. Andere Systeme benötigen zwei Self-Joins.


Es soll z.B. der Vorgesetzte von Müller und dessen Vorgesetzter ermittelt werden.

Lösung für Jet-SQL

SELECT m0.ma_name & ' --> ' & m1.ma_name & ' --> ' & m2.ma_name AS info
FROM   mitarbeiter AS m0,
       mitarbeiter AS m1,
       mitarbeiter AS m2
WHERE  m0.ma_name = 'Müller' AND
       m0.mgr = m1.ma_nr AND
       m1.mgr = m2.ma_nr

Lösung mittels CTE

WITH RECURSIVE w ( info, mgr, tiefe ) AS (
    SELECT ma_name,
           mgr,
           0
    FROM   mitarbeiter
    WHERE  ma_name = 'Müller'
    UNION  ALL
    SELECT info || ' --> ' || m.ma_name,
           m.mgr,
           tiefe + 1
    FROM   mitarbeiter AS m,
           w
    WHERE  w.mgr = m.ma_nr
)
SELECT info
FROM   w
WHERE  tiefe = 2

Hier ist ein dazu passender DBFiddle.

info
Müller --> Kühne --> König



Zurück zur Übersicht