代码之家  ›  专栏  ›  技术社区  ›  Kieron

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

  •  1
  • Kieron  · 技术社区  · 14 年前

    我需要能够返回一个使用SQL的所有级别上给定父Id的所有子级的列表。

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

    如果Id为“1”,我将如何返回整个列表。。。?嵌套的深度也没有限制。。。

    谢谢,
    基隆

    1 回复  |  直到 14 年前
        1
  •  3
  •   Martin Smith    14 年前

    让所有的孩子 @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)