1

如果有一个表,它有 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 和递归示例中进行了讨论,看起来很复杂。

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

谢谢

诺西布

4

1 回答 1

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

小提琴

于 2013-03-20T23:17:13.740 回答