postgresql 列出从选定员工到最终经理的记录

disho6za  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(156)

给定下表(Postgres格式):
| 员工ID|员工姓名|经理ID|
| - ------|- ------|- ------|
| 1个|大卫|零|
| 第二章|杰西卡|零|
| 三个|格雷格|1个|
| 四个|乔|三个|
| 五个|布兰登|零|
| 六个|莱斯利|四个|
| 七|哈里|六个|
| 八个|保罗|零|
| 九|法兰克|五个|
从**员工ID 7(Harry)**开始-如何在层次结构中自下而上仅列出记录,直到到达最终经理(在本例中,应该是大卫)?我应该使用递归CTE吗?如果是,该查询看起来如何?

预期产出:

| 员工ID|员工姓名|经理ID|
| - ------|- ------|- ------|
| 1个|大卫|零|
| 三个|格雷格|1个|
| 四个|乔|三个|
| 六个|莱斯利|四个|
| 七|哈里|六个|

cgvd09ve

cgvd09ve1#

在公用表表达式中,您可以识别:

  • 基本步骤,选择与员工编号7相关的记录
  • 递归步骤,在该步骤中,您将经理与当前检索到的员工进行匹配。

INNER JOIN不再返回任何额外记录时,递归停止。

WITH RECURSIVE cte AS (
    SELECT * FROM tab WHERE EmployeeID = 7
  
    UNION ALL
  
    SELECT mgr.*
    FROM       cte emp
    INNER JOIN tab mgr
            ON emp.ManagerID = mgr.EmployeeID
)
SELECT * 
FROM cte

检查here演示。

相关问题