Postgres 中的递归 CTE
Recursive CTE in Postgres
我有一个 table 结构:
Employee_ID Employee_Name Manager_ID
并且,对于每个员工,我需要显示最高经理 ID。我的意思是,例如,如果我的 EmployeeID 2 的经理是 3,因此,3 号的经理是 5 号,我必须显示:
Empoyee_ID--Top_Manager
2 5
我需要在 Postgres 中使用递归 CTE 来完成此操作。
类似于(对于 2 级经理):
WITH RECURSIVE T AS
(
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID, 1 AS MANAGER_LEVEL
FROM MyTable
UNION ALL
SELECT T.EMPLOYEE_ID, T.EMPLOYEE_NAME, E.MANAGER_ID, MANAGER_LEVEL + 1
FROM MyTable AS E
JOIN T ON T.MANAGER_ID = E.EMPLOYEE_ID
WHERE T.MANAGER_LEVEL = 1 --> limiting to level 2 - 1
)
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID
FROM T
WHERE MANAGER_LEVEL = 2 --> retrieving only level 2, not level 1 and 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 和关系级别的同时向上攀登层次结构。外部查询筛选每个员工的最高经理。
我有一个 table 结构:
Employee_ID Employee_Name Manager_ID
并且,对于每个员工,我需要显示最高经理 ID。我的意思是,例如,如果我的 EmployeeID 2 的经理是 3,因此,3 号的经理是 5 号,我必须显示:
Empoyee_ID--Top_Manager
2 5
我需要在 Postgres 中使用递归 CTE 来完成此操作。
类似于(对于 2 级经理):
WITH RECURSIVE T AS
(
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID, 1 AS MANAGER_LEVEL
FROM MyTable
UNION ALL
SELECT T.EMPLOYEE_ID, T.EMPLOYEE_NAME, E.MANAGER_ID, MANAGER_LEVEL + 1
FROM MyTable AS E
JOIN T ON T.MANAGER_ID = E.EMPLOYEE_ID
WHERE T.MANAGER_LEVEL = 1 --> limiting to level 2 - 1
)
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, MANAGER_ID
FROM T
WHERE MANAGER_LEVEL = 2 --> retrieving only level 2, not level 1 and 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 和关系级别的同时向上攀登层次结构。外部查询筛选每个员工的最高经理。