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

递归CTE SQL获取所有级别

  •  1
  • Nick77  · 技术社区  · 7 年前

    我必须用递归的CTE创建一个sql查询,我不知道如何继续。

    我的表有许多条目,它们都有一个Id和一个parentId。

    我想得到这样的结构:

    • 父母亲
      • 小孩
      • 小孩
    • 父母亲
      • 小孩

    等等

    所有具有父项的条目都应列在父项下。

    我最近的尝试如下所示:

    WITH Query AS 
    ( 
    SELECT P.Name, P.Id, P.ParentId
    FROM Table P 
    
    UNION ALL
    
    SELECT P1.Name, P1.Id, P1.ParentId
    FROM Table P1
    INNER JOIN Query M ON M.ParentId = P1.Id
    )
    SELECT * FROM Query
    

    我尝试了不同的事情,但没有达到我的目标。 我在这个问题上花了很多时间,不知道如何处理。 我希望有人能帮助我。提前谢谢。

    我只希望每个条目的顶部都有ParentId,下面有所有子项。多个条目都可以。

    1 回复  |  直到 7 年前
        1
  •  2
  •   shibormot    7 年前
    ;WITH Query AS 
    ( 
    SELECT P.Name, P.Id, P.ParentId
    FROM Table P 
    where P.ParentId = 0 -- assume root level records have ParentId = 0
    
    UNION ALL
    
    SELECT C.Name, C.Id, C.ParentId
    FROM Table C
    INNER JOIN Query P ON P.Id = C.ParentId
    )
    SELECT * FROM Query
    option ( MaxRecursion 0 );