SQL查询递归获取经理下所有员工的姓名

Sha*_*ngh 5 sql snowflake-cloud-data-platform

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

电磁脉冲表

EMP_ID     EMP_NAME     MANAGER_ID
1          A            3
2          B            3
3          C            4
4          D            5
5          E            NULL
Run Code Online (Sandbox Code Playgroud)

询问:

SELECT EMP_ID, EMP_NAME, MANAGER_ID FROM EMP_TABLE WHERE MANAGER_ID=4;
Run Code Online (Sandbox Code Playgroud)

该查询的输出:

EMP_ID     EMP_NAME     MANAGER_ID
3          C            4
Run Code Online (Sandbox Code Playgroud)

预期输出:

EMP_ID     EMP_NAME     MANAGER_ID
1          A            3
2          B            3
3          C            4
Run Code Online (Sandbox Code Playgroud)

Gok*_*til 3

需要使用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 |
+--------+----------+------------+
Run Code Online (Sandbox Code Playgroud)