PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ich möchte eine neue Spalte mit Rekursiv in SQL zurückgeben?

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

  1. Ein nicht rekursiver Begriff
  2. UNION oder UNION ALL
  3. Ein rekursiver Begriff, der einzige, der sich auf die Abfrageausgabe beziehen kann

Die Rekussion endet, wenn die vorherige Iteration keine Ausgabe hat.