gpt4 book ai didi

sql - 在oracle中查找父(任意级别)的最多子节点

转载 作者:行者123 更新时间:2023-12-05 02:21:26 27 4
gpt4 key购买 nike

我的表结构是

 | Parent ID   |  ID         |
|-------------|-------------|
| a | b |
| b | c |
| b | d |
| b | e |
| c | f |
| d | g |
| e | h |

我想为所有父节点获取最多的子节点。在另一个表中,我有 a 、 b 和 c 。然后我想得到下面的结果。

 |  Parent_ID  |  Child      |
|-------------|-------------|
| a | f |
| a | g |
| a | h |
| b | f |
| b | g |
| b | h |
| c | f |

f、g、h 是最低粒度的。

最佳答案

我认为“大多数子节点”是指树的叶节点。您可以使用分层 (CONNECT BY) 查询的 CONNECT_BY_ISLEAF 伪列来确定叶节点。

给定您在表中的示例数据,以下查询会产生所需的结果:

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

考虑到您更新的数据和要求,包括第二个表将 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 Fiddle您可以从 documentation 了解有关分层查询的更多信息.

关于sql - 在oracle中查找父(任意级别)的最多子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34348681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com