Това е каноничен пример за С РЕКУРСИВНО
Опитайте това:
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
Както е описано в документацията:
A С РЕКУРСИВНО винаги се съставя от
- Нерекурсивен термин
- СЪЮЗ или СЪЮЗ ВСИЧКИ
- Рекурсивен термин, единственият, който може да се отнася до изхода на заявката
Рекусията приключва, когато предишната итерация няма резултат.