通用递归sql查询

时间:2013-03-20 22:30:00

标签: sql database oracle

如果有一个表为2列,ParentId和ChildId,并且可能有多个级别,如下表所示

ParentId    ChildId
   -1             1
   -1             2
    1             3
    3             4
    4             5

如果孩子没有父母,则用-1表示。

现在,如果我需要最高级别的父级为5,那么其父级为4,父级为3,父级为1.因此1是答案,因为其父级= -1。

我在Sql server CTE and recursion example进行了讨论,似乎很复杂。

从谷歌搜索我知道我们可以使用WITH AS和UNION来实现这一点,任何人都可以对可以得到这个结果的通用sql有所了解吗?

感谢

Nohsib

1 个答案:

答案 0 :(得分:4)

select connect_by_root(ChildId) as id
from t
where ChildId = 5
start with ParentId = -1
connect by ParentId = prior ChildId

fiddle