fer*_*vak 3 t-sql recursion select
有没有办法按类似的表递归读取记录并按深度级别排序?
#table:
id int | parent int | value string
--------------------------------------------
1 -1 some
2 1 some2
3 2 some3
4 2 some4
5 3 some5
6 4 some6
7 3 some5
8 3 some5
9 8 some5
10 8 some5
Run Code Online (Sandbox Code Playgroud)
那么有一种方法可以递归地选择结果表看起来像这样的地方.
select * from #table where id=3
id int | parent int | value string | depth
--------------------------------------------------------
3 2 some3 0
5 3 some5 1
7 3 some5 1
8 3 some5 1
9 8 some5 2
10 8 some5 2
Run Code Online (Sandbox Code Playgroud)
因此,如果我选择id = 3,我会看到id = 3和children的递归
谢谢
;with C as
(
select id,
parent,
value,
0 as depth
from YourTable
where id = 3
union all
select T.id,
T.parent,
T.value,
C.depth + 1
from YourTable as T
inner join C
on T.parent = C.id
)
select *
from C
Run Code Online (Sandbox Code Playgroud)
您可以使用 CTE,特别是 rCTE 来完成。
示例如下:
WITH sampleCTE (id, parent, value, depth)
AS (
-- Anchor definition
SELECT id
, parent
, value
, 0
FROM #table
WHERE id = @targetId
-- Recursive definition
UNION ALL
SELECT child.id
, child.parent
, child.value
, sampleCTE.depth + 1
FROM #table child
INNER JOIN sampleCTE ON sampleCTE.id = child.parent
)
Run Code Online (Sandbox Code Playgroud)