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和关系级别的同时,向上提升层次结构。外部查询筛选每个员工的最高管理者