【问题标题】:SQL Query to get name of all employees under a manager recursivelySQL查询以递归方式获取经理下所有员工的姓名
【发布时间】:2021-12-30 10:52:56
【问题描述】:

我正在寻找一个查询,以递归方式获取特定经理下所有员工的姓名。

EMP_TABLE

EMP_ID     EMP_NAME     MANAGER_ID
1          A            3
2          B            3
3          C            4
4          D            5
5          E            NULL

查询:

SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM EMP_TABLE WHERE MANAGER_ID=4;

此查询的输出:

EMP_ID     EMP_NAME     MANAGER_ID
3          C            4

预期输出:

EMP_ID     EMP_NAME     MANAGER_ID
1          A            3
2          B            3
3          C            4

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    需要使用 CONNECT BY 处理表中的分层数据:

    https://docs.snowflake.com/en/sql-reference/constructs/connect-by.html

    SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM EMP_TABLE 
    START WITH MANAGER_ID=4
    CONNECT BY MANAGER_ID = prior EMP_ID
    ORDER BY EMP_ID;
    
    +--------+----------+------------+
    | EMP_ID | EMP_NAME | MANAGER_ID |
    +--------+----------+------------+
    |      1 | A        |          3 |
    |      2 | B        |          3 |
    |      3 | C        |          4 |
    +--------+----------+------------+
    

    【讨论】:

    • Gokhan Atil OMG!你很棒。真的很棒的答案。它解决了我的问题。
    【解决方案2】:

    CONNECT BY的解决方案很清楚。

    这里有一个递归解决方案:

    WITH rec AS (
        SELECT EMP_ID, EMP_NAME, MANAGER_ID 
          FROM EMP_TABLE 
         WHERE MANAGER_ID=4
         UNION ALL
        SELECT tb.EMP_ID, tb.EMP_NAME, tb.MANAGER_ID 
          FROM rec AS ta
          JOIN EMP_TABLE AS tb ON ta.EMP_ID = tb.MANAGER_ID
    )
    SELECT EMP_ID, EMP_NAME, MANAGER_ID 
      FROM rec
     ORDER BY 1;
    

    【讨论】:

      【解决方案3】:

      您可以使用这个简单的查询 SELECT * FROM EMP_TABLE WHERE MANAGER_ID 不为 NULL

      【讨论】:

      • Abhay S:如果 manager_id=5,您的查询将如何工作。我的问题是递归结果。
      • 如果您需要递归结果,那么这个文档可以帮助您。此查询的简单结果 haughtcodeworks.com/blog/software-development/… SELECT* FROM EMP_TABLE START WITH MANAGER_ID=5 CONNECT BY MANAGER_ID = prior EMP_ID ORDER BY EMP_ID;
      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多