sql - Postgres 中的递归 CTE
问题描述
我有一个结构表:
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
推荐阅读
- c++ - C++ 应在标头和源代码中包含字符串
- angular - 当应用程序在 X 秒后未能获得当前位置时显示要使用的消息
- python - Python 3:以增量方式将多个字典写入 CSV 文件
- c# - 在 C# 中并行运行任务
- git - git-tfs 克隆错误:路径包含超过允许的 259 个字符
- c# - 按另一个数组中指定的顺序对数组进行排序
- hyperledger-fabric - Hyperledger Fabric CA 客户端的 fabric-ca-client-config.yaml 配置文件中“注册”字段的用途
- angular - 现有 Angular 4 项目中的离子框架
- sql-server - SQL SERVER中如何根据MonthStart_Date和MonthEnd_date多次复制表记录
- javascript - 来自 chrome 扩展的注入脚本多次返回值