Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Znajdź całe drzewo od korzenia dając dowolny węzeł

Musisz najpierw przejść w górę drzewa, aby uzyskać wszystkich menedżerów, a następnie przejść w dół, aby pobrać wszystkich pracowników:

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
     )
;

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

Edytuj:

Jeśli dany węzeł może być również węzłem głównym, rozszerz zapytanie, aby uwzględnić dany węzeł na liście węzłów nadrzędnych:

Przykład dla węzła innego niż root:

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
     )
;

Przykład węzła głównego:

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
     )
;

Graj na http://www.sqlfiddle.com/#!4/d15e7/32



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obsługiwane modele formatów dla funkcji daty ROUND() i TRUNC() w Oracle

  2. PL/SQL przepisz skonkatenowane zapytanie z klauzulą ​​„IN”

  3. Zamówienie niestandardowe w Oracle SQL

  4. Procedura tworzenia Oracle sql, aby pokazać cotygodniowy ranking

  5. java.sql.SQLException:ORA-06550:po wywołaniu procedury z kodu java