sql – 父元素的递归连接

前端之家收集整理的这篇文章主要介绍了sql – 父元素的递归连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个看起来像这样的表:
ID     |Name    |Parent
1      |A       |NULL
2      |B       |NULL
3      |C       |1
4      |D       |1
5      |E       |3
6      |F       |5

我希望有一个观点回报这个:

ID     |Name    |ParentNames
1      |A       |
2      |B       |
3      |C       |A
4      |D       |A
5      |E       |A > C
6      |F       |A > C > E

我试图离开加入一个显示ID第一个父亲的视图,并将其与自己连接,但这不起作用.

有没有办法在没有存储过程/函数的情况下执行此操作?我有~15k行,每个~0-5个父母,但我宁愿不硬编码最多5个父母.

解决方法

@H_404_15@ 你可以使用 recursive CTE.
declare @T table(ID int,Name char(1),Parent int);

insert into @T values  
(1,'A',NULL),(2,'B',(3,'C',1),(4,'D',(5,'E',3),(6,'F',5);

with C as
(
  select ID,Name,Parent,cast('' as varchar(max)) as ParentNames
  from @T
  where parent is null
  union all
  select T.ID,T.Name,T.Parent,C.ParentNames + ' > ' + C.Name
  from @T as T         
    inner join C
      on C.ID = T.Parent
)      
select ID,stuff(ParentNames,1,3,'') as ParentNames
from C;

猜你在找的MsSQL相关文章