Oracle分层查询连接到所有后代的选择

时间:2014-02-06 08:13:11

标签: oracle hierarchical

我正在尝试检索每个项目的每个后代的列表。 我不确定我是否有意义,我会尝试解释。

示例数据:

ID | PID
--------
1  | 0
2  | 1
3  | 1
4  | 1
5  | 2
6  | 2
7  | 5
8  | 3

等...

期望的结果是:

ID | Decendant
--------------
1  | 1
1  | 2
1  | 3
1  | 4
...
2  | 2
2  | 5
2  | 6
2  | 7
3  | 3
3  | 8

等...

目前,这是通过使用游标在数据中移动并将每个后代插入表中然后从中进行选择来实现的。

我想知道是否有更好的方法来做这些,必须有一种方法来纠正一个会带来所需结果的查询。

如果有任何人有想法,或者已经明白这一点,那么我们将非常感激。订购并不重要,也不是1 - 1,2-2参考。拥有它会很酷,但并不重要。

2 个答案:

答案 0 :(得分:1)

select connect_by_root(id) as ID, id as Decendant
from table1
connect by prior id = pid
order by 1, 2

fiddle

答案 1 :(得分:1)

这是我的尝试!不确定,如果我帮你了!

select pid ,connect_By_root(id) as descendant from process
connect by  id = prior pid
union all
select distinct pid,pid from
process
order by pid,descendant