当前位置 : 主页 > 网络推广 > seo >

.net – 检索所有子项及其子项,递归SQL

来源:互联网 收集:自由互联 发布时间:2021-06-16
考虑数据库中的以下行: Id | Parent__________________1 null2 13 24 35 null6 5 具有空Parent的每个Id是“Owner”/“Super Parent”. 收集父母及其子女的最佳方法,表现明智是什么?我应该使用LINQ还是存储
考虑数据库中的以下行:

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

具有空Parent的每个Id是“Owner”/“Super Parent”.

收集父母及其子女的最佳方法,表现明智是什么?我应该使用LINQ还是存储过程?

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

在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行的子项.

网友评论