Dies ist ein kanonisches Beispiel für WITH RECURSIVE
Versuchen Sie Folgendes:
with recursive subordinates as
(select
employeid,
e.managerid,
e.managerid as leader
from employes e
where e.managerid in(select * from leaders) -- non recursive term
union
select
e.employeid,
e.managerid,
a.managerid as leader
from employes e
join subordinates a on a.employeid = e.managerid -- recursive term
) select * from subordinates
Wie in der Dokumentation beschrieben:
A MIT REKURSIV besteht immer aus
- Ein nicht rekursiver Begriff
- UNION oder UNION ALL
- Ein rekursiver Begriff, der einzige, der sich auf die Abfrageausgabe beziehen kann
Die Rekussion endet, wenn die vorherige Iteration keine Ausgabe hat.