sql >> Databáze >  >> RDS >> PostgreSQL

Chci vrátit nový sloupec pomocí rekurzivního v SQL?

Toto je kanonický příklad S REKURSIVNÍM

Zkuste toto:

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

Jak je popsáno v dokumentaci:

A S REKURZIVNÍM je vždy tvořen

  1. Nerekurzivní termín
  2. UNIE nebo UNION ALL
  3. Rekurzivní termín, jediný, který může odkazovat na výstup dotazu

Rekuse skončí, když předchozí iterace nemá žádný výstup.




  1. SQL server vybere odlišné řádky pouze pomocí nejnovější hodnoty

  2. Vyžaduje se rada s dotazem MySQL

  3. Nastavte výchozí přednačítání řádků v SQL Server pomocí ovladače JDBC

  4. Jak automatizovat dotazy na kontingenční tabulky v MySQL