我正在尋找一個查詢以遞回地獲取特定經理下所有員工的姓名。
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
uj5u.com熱心網友回復:
您需要使用 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 |
-------- ---------- ------------
uj5u.com熱心網友回復:
該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;
uj5u.com熱心網友回復:
你可以使用這個簡單的查詢 SELECT * FROM EMP_TABLE WHERE MANAGER_ID IS NOT NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399502.html
