小编典典

检索所有子代及其子代,递归SQL

sql

考虑数据库中的以下行:

Id      |   Parent
__________________
1           null
2           1
3           2
4           3
5           null
6           5

每个Id具有的null Parent是“所有者” /“超级父代”。

从表现的角度来看,收集父母和子女的最佳方法是什么?我应该使用 LINQ 还是 存储过程

我希望最终结果是IEnumerable<IEnumerable<int>>


阅读 224

收藏
2021-03-23

共1个答案

小编典典

在SQL中,您可以使用CTE进行查询。例如,要检索在其树中具有其父级和最高父级的节点的列表:

declare @t table (id int, parent int)
insert @t (id, parent) values (1, null), (2,1), (3,2), (4,3), (5,null), (6,5)

; with cte as (
    select  id, parent, id as head
    from    @t
    where   parent is null
    union all
    select  child.id, child.parent, parent.head
    from    @t child
    join    cte parent
    on      parent.id = child.parent
)
select  *
from    cte

这给出了:

id  parent  head
1   NULL    1
2   1       1
3   2       1
4   3       1
5   NULL    5
6   5       5

请注意,我更改了示例数据,因此第2行不再是其自身的子级,而是第1行的子级。

2021-03-23