【发布时间】:2016-09-16 15:26:14
【问题描述】:
给定开头、中间或结尾的 ID,我想查找它们之间链接的所有行。
这样我递归地找到了子元素
declare @T table(
Id int primary key,
Name nvarchar(255) not null,
ParentId int)
insert into @T values
(1, 'A', NULL),
(2, 'B', 1),
(3, 'C', 2),
(4, 'D', NULL),
(5, 'E', 1)
declare @Id int = 2
;with cte as
(
select T.*
from @T as T
where T.Id = @Id
union all
select T.*
from @T as T
inner join cte as C
on T.ParentId = C.Id
)
select *
from cte
如果@Id 等于 2,我将得到 2 和 3。但我也想检索父级,在本例中为 1。
我想得到这个:
如果 id = 1
1 A NULL
2 B 1
3 C 2
5 E 1
如果 id = 2
1 A NULL
2 B 1
3 C 2
5 E 1
如果 id = 3
1 A NULL
2 B 1
3 C 2
5 E 1
如果 id = 4
4 D NULL
如果 id = 5
1 A NULL
2 B 1
3 C 2
5 E 1
我该如何解决这个问题?
【问题讨论】:
-
您可以编辑您的问题并添加所需的输出吗?
-
为什么 id=1 我们不应该得到 '5 E 1' 记录?
-
对不起,我的错。已更正。
标签: sql-server recursion parent-child nodes common-table-expression