在自联接表上返回父/子关系

时间:2010-09-06 16:01:58

标签: tsql sql-server-2008 hierarchy

我需要能够使用SQL返回给定所有级别的父ID的所有孩子的列表。

表格如下所示:

ID   ParentId   Name
---------------------------------------
1    null       Root
2    1          Child of Root
3    2          Child of Child of Root

给出“1”的ID,我将如何返回整个列表......?嵌套的深度没有限制......

谢谢,
基隆

1 个答案:

答案 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)