获取具有 parentId SQL 的所有级别的行

Get rows in all levels with parentId SQL

我有一个 table Categories,这个 table 中的每一行都有一个 parentId。父级只是同一 table.

中的另一行

我想创建查询以通过仅提供第一个父级的 Id 来获取不同级别的所有子级。

使用递归 cte:

DECLARE @t TABLE ( id INT, pid INT )
INSERT  INTO @t
VALUES  ( 1, NULL ),
        ( 2, NULL ),
        ( 3, 1 ),
        ( 4, 1 ),
        ( 5, 3 ),
        ( 6, 5 ),
        ( 7, 6 ),
        ( 8, 6 )

DECLARE @p INT = 1;

WITH    cte
          AS ( SELECT   *
               FROM     @t
               WHERE    pid = @p
               UNION ALL
               SELECT   t.*
               FROM     @t t
                        JOIN cte c ON c.id = t.pid
             )
    SELECT  *
    FROM    cte c

输出:

id  pid
3   1
4   1
5   3
6   5
7   6
8   6

编辑:

在另一个select statement中使用:

WITH    cte
      AS ( SELECT   *
           FROM     @t
           WHERE    pid = @p
           UNION ALL
           SELECT   t.*
           FROM     @t t
                    JOIN cte c ON c.id = t.pid
         )
SELECT  *
FROM    cte c
JOIN AnotherTable t on c.id = t.id