加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 父元素的递归连接

发布时间:2020-12-12 08:51:14 所属栏目:MsSql教程 来源:网络整理
导读:我有一个看起来像这样的表: ID |Name |Parent1 |A |NULL2 |B |NULL3 |C |14 |D |15 |E |36 |F |5 我希望有一个观点回报这个: ID |Name |ParentNames1 |A |2 |B |3 |C |A4 |D |A5 |E |A C6 |F |A C E 我试图离开加入一个显示ID第一个父亲的视图,并将其与自己
我有一个看起来像这样的表:
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个父母.

解决方法

你可以使用 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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读