「ほとんどの子ノード」とは、ツリーのリーフノードを意味すると思います。 CONNECT_BY_ISLEAF
を使用してリーフノードを判別できます。 階層の疑似列(CONNECT BY
)クエリ。
テーブル内のサンプルデータを指定すると、次のクエリで目的の結果が得られます。
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 |
2番目のテーブルが開始条件としてa、b、およびcを保持しているという事実を含め、更新されたデータと要件を考慮に入れます。
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フィドル 階層クエリの詳細については、ドキュメント をご覧ください。 。