PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Voglio restituire una nuova colonna usando ricorsivo in SQL?

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

  1. Un termine non ricorsivo
  2. UNIONE o UNION ALL
  3. Un termine ricorsivo, l'unico che può fare riferimento all'output della query

La recussione termina quando l'iterazione precedente non ha output.