代码之家  ›  专栏  ›  技术社区  ›  John Jackson

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

  •  1
  • John Jackson  · 技术社区  · 1 年前

    给定下表(以Postgres为单位):

    员工编号 员工姓名 经理ID
    1. 大卫 无效的
    2. 杰西卡 无效的
    3. Gregg 1.
    4. Joe 3.
    5. 布兰登 无效的
    6. Leslie 4.
    7. 骚扰 6.
    8. 保罗 无效的
    9 直率的 5.

    从开始 员工ID 7(Harry) -如何在层次结构中只列出自下而上的记录,直到找到最终的经理( 应该是大卫 ,在这种情况下)?我应该使用递归CTE吗?如果是,那么该查询看起来如何?

    预期输出:

    员工编号 员工姓名 经理ID
    1. 大卫 无效的
    3. Gregg 1.
    4. Joe 3.
    6. Leslie 4.
    7. 骚扰 6.
    1 回复  |  直到 1 年前
        1
  •  0
  •   lemon    1 年前

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

    • 基本步骤,在该步骤中选择与员工编号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 .