表上的递归调用

Fre*_*kyB 1 t-sql sql-server

我有这样一张桌子:

declare @departments table
(
depa_key int,
depa_key1 int
)

insert into @departments(depa_key, depa_key1)
select 1,2
union all
select 2,4
union all
select 4,5
Run Code Online (Sandbox Code Playgroud)

因此,在填充一些数据后,表格如下所示:

depa_key    depa_key1
1               2
2               4
4               5
5              NULL
Run Code Online (Sandbox Code Playgroud)

DEPA_KEY1始终是来自`DEPA_KEY的父级.

我想做的是获得给定的整体层次(所有depa_key1)depa_key.

示例:对于depa_key = 1,结果应为:

depa_key
2
4
5
Run Code Online (Sandbox Code Playgroud)

但我不知道怎么做?

Gur*_*ngh 5

您可以使用递归CTE:

;with cte as (
    select depa_key1 from @departments where depa_key = 1
    union all
    select d.depa_key1 from cte c join @departments d on c.depa_key1 = d.depa_key
)
select * from cte;
Run Code Online (Sandbox Code Playgroud)

演示