使用具有两列的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中完成它。语法有点依赖于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示例