在 SQL Server 中查找特定子项直到第 5 个子项

问题描述 投票:0回答:1

我有一个包含两列的表格

workitem_id
parent_workitem_id

我需要在一个表上显示这种格式的数据:

workitem, lvl1_child, lvl2_child, lvl3_child, lvl4_child, lvl5_child

我想我可以用递归查询来做到这一点,但我不知道如何写。

sql sql-server recursion tree
1个回答
0
投票

您可以使用自连接或左连接来实现它。另外,如果您不希望记录没有子项,那么您可以使用内连接来避免空值。

这里我为您的案例演示了左连接的示例。使用以下查询查看输出。

-- create

CREATE TABLE Workitem (
  workitem_id int,
  parentWorkItem_id int
);

insert into Workitem values(1,0);
insert into Workitem values(2,1);
insert into Workitem values(3,1);
insert into Workitem values(4,2);
insert into Workitem values(5,3);
insert into Workitem values(6,2);
insert into Workitem values(7,3);
insert into Workitem values(8,5);
insert into Workitem values(9,4);
insert into Workitem values(10,8);
insert into Workitem values(11,9);


-- fetch 
SELECT w.workitem_id, lv1.workitem_id lv1_child, lv2.workitem_id lv2_child, lv3.workitem_id lv3_child, lv4.workitem_id lv4_child FROM Workitem w
left join Workitem lv1 on lv1.parentWorkItem_id = w.workitem_id
left join Workitem lv2 on lv2.parentWorkItem_id = lv1.workitem_id and lv1.parentWorkItem_id = w.workitem_id
left join Workitem lv3 on lv3.parentWorkItem_id = lv2.workitem_id and lv2.parentWorkItem_id = lv1.workitem_id and lv1.parentWorkItem_id = w.workitem_id
left join Workitem lv4 on lv4.parentWorkItem_id = lv3.workitem_id and lv3.parentWorkItem_id = lv2.workitem_id and lv2.parentWorkItem_id = lv1.workitem_id and lv1.parentWorkItem_id = w.workitem_id
left join Workitem lv5 on lv5.parentWorkItem_id = lv4.workitem_id  and lv4.parentWorkItem_id = lv3.workitem_id and lv3.parentWorkItem_id = lv2.workitem_id and lv2.parentWorkItem_id = lv1.workitem_id and lv1.parentWorkItem_id = w.workitem_id

GO

如果有任何发现请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.