sql >> Databasteknik >  >> RDS >> Oracle

Hitta hela trädet från roten som ger valfri nod

Du måste först gå upp i trädet för att få alla chefer och sedan gå ner för att hämta alla anställda:

select level, employee_id, last_name, manager_id ,
       connect_by_root employee_id as root_id
   from employees
connect by prior employee_id = manager_id -- down the tree
start with manager_id in ( -- list up the tree
     select manager_id 
       from employees
     connect by employee_id = prior manager_id -- up the tree
     start with employee_id = 101
     )
;

Se http://www.sqlfiddle.com/#!4/d15e7/18

Redigera:

Om den givna noden också kan vara rotnoden utökar du frågan till att inkludera den givna noden i listan över överordnade noder:

Exempel för icke-rotnod:

select distinct employee_id, last_name, manager_id 
   from employees
connect by prior employee_id = manager_id -- down the tree
start with manager_id in ( -- list up the tree
     select manager_id 
       from employees
     connect by employee_id = prior manager_id -- up the tree
     start with employee_id = 101
     union 
     select manager_id -- in case we are the root node
       from employees
     where manager_id = 101
     )
;

Exempel på rotnod:

select distinct employee_id, last_name, manager_id 
   from employees
connect by prior employee_id = manager_id -- down the tree
start with manager_id in ( -- list up the tree
     select manager_id 
       from employees
     connect by employee_id = prior manager_id -- up the tree
     start with employee_id = 100
     union 
     select manager_id -- in case we are the root node
       from employees
     where manager_id = 100
     )
;

Fiddle på http://www.sqlfiddle.com/#!4/d15e7/32



  1. Infogar null-värden vid användning av bulkinsert

  2. Skriv date default sysdate i Mysql

  3. postgres vet inte var serverns konfigurationsfil kan hittas

  4. infoga utvalda data som främmande nyckel och SQLSTATE[23000]:Överträdelse av integritetsbegränsning:1048