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

Tìm nút con nhất của nút cha (bất kỳ cấp nào) trong oracle

Bởi "hầu hết các nút con", tôi nghĩ bạn muốn nói đến các nút lá của cây. Bạn có thể xác định các nút lá bằng CONNECT_BY_ISLEAF cột giả của phân cấp (CONNECT BY ) truy vấn.

Cung cấp dữ liệu mẫu của bạn trong một bảng, truy vấn sau đây mang lại kết quả mong muốn:

select connect_by_root id id
     , parent_did
  from table1
 where connect_by_isleaf = 1
connect by id = prior parent_did
  start with id in ('a','b','c');

| ID | PARENT_DID |
|----|------------|
|  a |          f |
|  a |          g |
|  a |          h |
|  b |          f |
|  b |          g |
|  b |          h |
|  c |          f |

SQL Fiddle

Có tính đến dữ liệu cập nhật và các yêu cầu của bạn, bao gồm cả thực tế là bảng thứ hai giữ a, b và c làm điều kiện bắt đầu:

select connect_by_root parent_id parent_id
     , id
  from table1
 where connect_by_isleaf = 1
connect by prior id = parent_id
  start with parent_id in (select id from table2)

| PARENT_ID | ID |
|-----------|----|
|         a |  f |
|         a |  g |
|         a |  h |
|         b |  f |
|         b |  g |
|         b |  h |
|         c |  f |

SQL Fiddle Bạn có thể tìm hiểu thêm về truy vấn phân cấp từ tài liệu .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mệnh đề OVER trong Oracle

  2. Không thể gọi một thủ tục được lưu trữ Oracle từ trình tạo báo cáo SSRS 3.0

  3. Làm cách nào để đưa ra nhiều điều kiện trong toán tử LIKE?

  4. Gọi Oracle PL / SQL PLS-00201:mã định danh '001' phải được khai báo

  5. Thực thi ngay không thành công ngay cả khi cấp bảng CREATE