使用具有两列的sql表中的数据构建类似树/父子结构

本文关键字:构建 数据 结构 父子 sql 两列 | 更新日期: 2023-09-27 18:25:55

我有一个sql表,它有两列Parent,Child,没有主键。数据是巨大的。现在,我需要开发Parent->Child->Child的子级的层次结构。

例如:表中的数据如下:

Parent Child
  1      2
  1      3
  1      10
  1      11
  2      5
  2      10
  2      7
  3      1
  3      13
  4      15
  7      17
  8      20

现在,我需要家长->孩子->所有孩子的所有孩子,等等在一个组下:组1-1,2,3,10,1,5,7,13;2-4、15组;第3组-7,17;第4-8.20组。有人能告诉我使用sql或c#实现这一目标的最佳/有效方法吗?

谢谢!

使用具有两列的sql表中的数据构建类似树/父子结构

好吧,您可以在SQL中完成它。语法有点依赖于RDBMS,但通常它类似于(您最好在子列和父列上创建一些索引,或者将其复制到临时表中,然后创建索引,否则可能会很慢)

;with CTE as (
    select Parent as ID, Child as Child, 1 as num
    from temp
    where Parent not in (select Child from temp)
    union all
    select C.ID, p.Child as Child, num + 1 as num
    from temp as p
        inner join CTE as C on C.Child = p.Parent
)
select
    C.ID,
    stuff(
        (
            select ', ' + cast(t.Child as nvarchar(max))
            from CTE as t
            where t.ID = C.ID
            order by t.num, t.Child
            for xml path(''), type
        ).value('.', 'nvarchar(max)')
    , 1, 2, '')
from CTE as C
group by C.ID
option (maxrecursion 0)

SQL FIDDLE示例