获取具有 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
我有一个 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