我需要能够使用SQL返回给定所有级别的父ID的所有孩子的列表。
表格如下所示:
ID ParentId Name
---------------------------------------
1 null Root
2 1 Child of Root
3 2 Child of Child of Root
给出“1”的ID,我将如何返回整个列表......?嵌套的深度没有限制......
谢谢,
基隆
答案 0 :(得分:3)
要以这种方式存储给定@ParentId
的所有孩子,您可以使用递归CTE。
declare @ParentId int
--set @ParentId = 1
;WITH T AS
(
select 1 AS ID,null AS ParentId, 'Root' as [Name] union all
select 2,1,'Child of Root' union all
select 3,2,'Child of Child of Root'
),
cte AS
(
SELECT ID, ParentId, Name
FROM T
WHERE ParentId = @ParentId OR (ParentId IS NULL AND @ParentId IS NULL)
UNION ALL
SELECT T.ID, T.ParentId, T.Name
FROM T
JOIN cte c ON c.ID = T.ParentId
)
SELECT ID, ParentId, Name
FROM cte
OPTION (MAXRECURSION 0)