use*_*035 3 sql oracle oracle10g hierarchical-data
我的表结构是
| Parent ID | ID |
|-------------|-------------|
| a | b |
| b | c |
| b | d |
| b | e |
| c | f |
| d | g |
| e | h |
Run Code Online (Sandbox Code Playgroud)
我想获得所有父节点的最多子节点。在另一个表中我有 a 、 b 和 c 。然后我想得到下面的结果。
| Parent_ID | Child |
|-------------|-------------|
| a | f |
| a | g |
| a | h |
| b | f |
| b | g |
| b | h |
| c | f |
Run Code Online (Sandbox Code Playgroud)
f、g、h 是最低粒度。
我认为“大多数子节点”指的是树的叶节点。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 |
Run Code Online (Sandbox Code Playgroud)
考虑您更新的数据和要求,包括第二个表将 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 |
Run Code Online (Sandbox Code Playgroud)
SQL Fiddle 您可以从文档中了解有关分层查询的更多信息。
归档时间: |
|
查看次数: |
971 次 |
最近记录: |