Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tìm toàn bộ cây từ gốc cho bất kỳ nút nào

Trước tiên, bạn cần đi qua cây để tìm tất cả người quản lý, sau đó đi xuống để tìm nạp tất cả nhân viên:

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

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

Chỉnh sửa:

Nếu nút đã cho cũng có thể là nút gốc, hãy mở rộng truy vấn để đưa nút đã cho vào danh sách các nút mẹ:

Ví dụ cho nút không phải gốc:

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

Ví dụ cho nút gốc:

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 tại 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. Làm thế nào để chọn chuỗi con trong oracle?

  2. PostgreSQL và / hoặc SQL Server thay thế cho SYS_CONTEXT của Oracle

  3. Oracle không thể lưu trữ biểu tượng cảm xúc

  4. Cấp quyền tạo thư mục trong Oracle

  5. Đánh giá các biến boolean PL / SQL trong Oracle Forms