PostgreSQL中从指定员工向上追溯至终极经理的递归CTE查询
问题
现有如下PostgreSQL员工表:
| EmployeeID | EmployeeName | ManagerID |
|---|---|---|
| 1 | David | NULL |
| 2 | Jessica | NULL |
| 3 | Gregg | 1 |
| 4 | Joe | 3 |
| 5 | Brandon | NULL |
| 6 | Leslie | 4 |
| 7 | Harry | 6 |
| 8 | Paul | NULL |
| 9 | Frank | 5 |
如何从员工ID 7(Harry)开始,自底向上列出层级记录直至终极经理(本例为David)?是否应使用递归CTE?若使用,对应的查询语句是什么?
回答
是的,递归CTE是解决这类层级追溯问题的标准方案,非常适合从指定节点向上遍历至顶级节点的场景。
对应的PostgreSQL查询语句如下:
WITH RECURSIVE employee_hierarchy AS ( -- 锚点查询:定位起始员工Harry(ID=7) SELECT EmployeeID, EmployeeName, ManagerID FROM employees WHERE EmployeeID = 7 UNION ALL -- 递归查询:逐层向上关联员工的直属经理 SELECT e.EmployeeID, e.EmployeeName, e.ManagerID FROM employees e JOIN employee_hierarchy eh ON e.EmployeeID = eh.ManagerID ) -- 按层级从顶级到末级排序,确保终极经理排在最前 SELECT EmployeeID, EmployeeName, ManagerID FROM employee_hierarchy ORDER BY ManagerID NULLS FIRST;
预期输出
| EmployeeID | EmployeeName | ManagerID |
|---|---|---|
| 1 | David | NULL |
| 3 | Gregg | 1 |
| 4 | Joe | 3 |
| 6 | Leslie | 4 |
| 7 | Harry | 6 |
内容的提问来源于stack exchange,提问作者John Jackson
相关产品推荐
相关产品推荐

