Sql Postgres中的递归CTE
我有一张结构如下的桌子:Sql Postgres中的递归CTE,sql,postgresql,common-table-expression,hierarchical-data,recursive-query,Sql,Postgresql,Common Table Expression,Hierarchical Data,Recursive Query,我有一张结构如下的桌子: Employee\u ID Employee\u Name Manager\u ID 而且,对于每个员工,我需要显示最高管理者ID。我的意思是,如果我有EmployeeID 2,其经理是3,因此,数字3有经理编号5,我必须显示: Empoyee\u ID——最高管理者 2 5 我需要在Postgres中使用递归CTE来实现这一点。类似于(对于2级经理): 类似于(对于2级经理): 这是一个典型的递归查询。以下是一种在Postgres中实现这一点的
Employee\u ID Employee\u Name Manager\u ID
而且,对于每个员工,我需要显示最高管理者ID。我的意思是,如果我有EmployeeID 2,其经理是3,因此,数字3有经理编号5,我必须显示:
Empoyee\u ID——最高管理者
2 5
我需要在Postgres中使用递归CTE来实现这一点。类似于(对于2级经理):
类似于(对于2级经理):
这是一个典型的递归查询。以下是一种在Postgres中实现这一点的方法:
with recursive cte as (
select 1 lvl, employee_id, manager_id from mytable
union all
select c.lvl + 1, c.employee_id, t.manager_id
from cte c
inner join mytable t on t.employee_id = c.manager_id
)
select distinct on (employee_id) employee_id, manager_id top_manager
from cte c
order by employee_id, lvl desc
cte在跟踪原始员工id和关系级别的同时,向上提升层次结构。外部查询筛选每个员工的最高管理者。这是一个典型的递归查询。以下是一种在Postgres中实现这一点的方法:
with recursive cte as (
select 1 lvl, employee_id, manager_id from mytable
union all
select c.lvl + 1, c.employee_id, t.manager_id
from cte c
inner join mytable t on t.employee_id = c.manager_id
)
select distinct on (employee_id) employee_id, manager_id top_manager
from cte c
order by employee_id, lvl desc
cte在跟踪原始员工id和关系级别的同时,向上提升层次结构。外部查询筛选每个员工的最高管理者