我有一个表Categories
,此表中的每一行都有一个parentId
。父级只是同一个表中的另一行。
我想通过提供第一个父级的Id
来创建查询以使所有孩子处于不同级别。
答案 0 :(得分:1)
使用递归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