Questo è un esempio canonico di CON RECURSIVE
Prova questo:
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
Come descritto nella documentazione:
UN CON RICORSO è sempre composto da
- Un termine non ricorsivo
- UNIONE o UNION ALL
- Un termine ricorsivo, l'unico che può fare riferimento all'output della query
La recussione termina quando l'iterazione precedente non ha output.