Ceci est un exemple canonique de AVEC RÉCURSIF
Essayez ceci :
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
Comme décrit dans la documentation :
A AVEC RÉCURSCIF est toujours composé de
- Un terme non récursif
- UNION ou UNION TOUS
- Un terme récursif, le seul qui peut faire référence à la sortie de la requête
La récusion se termine lorsque l'itération précédente n'a pas de sortie.