我有一个问题,就是无法解决。我知道我想要的,只是无法在屏幕上显示出来。我有一张桌子,看起来像这样:
Id, PK UniqueIdentifier, NotNull Name, nvarchar(255), NotNull ParentId, UniqueIdentifier, Null
ParentId具有FK到ID。
我要完成的工作是获取我传递的ID下方所有ID的完整列表。
例子:
1 TestName1 NULL 2 TestName2 1 3 TestName3 2 4 TestName4 NULL 5 TestName5 1
这棵树看起来像这样:
-1 -> -2 -> -3 -> -5 -4
如果我现在要求4,我将只得到4,但是如果我要求1,我将得到1、2、3和5。如果我要求2,我将得到2和3,依此类推。
有谁能指出我正确的方向。我的大脑炸了,所以我感谢我能得到的所有帮助。
declare @T table( Id int primary key, Name nvarchar(255) not null, ParentId int) insert into @T values (1, 'TestName1', NULL), (2, 'TestName2', 1), (3, 'TestName3', 2), (4, 'TestName4', NULL), (5, 'TestName5', 1) declare @Id int = 1 ;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 Name ParentId ----------- -------------------- ----------- 1 TestName1 NULL 2 TestName2 1 5 TestName5 1 3 TestName3 2