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 |
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 .