我的表包含三列,值如下所示
Emp_ID | Emp_Name | Emp_Manager_ID
========================================
1 | Admin | Null
2 | John | 1
3 | Sam | 2
4 | Mike | 2
5 | Jeff | 4
6 | Ben | 3
7 | Vicky | 5
参数id @Emp_ID = 2
查找给定 Emp_Id 下的所有下属的预期结果
所以结果应该是所有 EmpID 3,4,5,6,7
因为2是3,4的经理,3是6的经理,4是5的经理,5是7的经理
最佳答案
使用 Recursing CTE 。当前返回所有三列。如果您不需要这些信息,请从 SELECT
中删除 Emp_Name
和 Emp_Manager_ID
。
WITH Subordinates AS
(
SELECT e.Emp_ID, e.Emp_Name, e.Emp_Manager_ID
FROM Employee AS e
WHERE e.Emp_Manager_ID = 2
UNION ALL
SELECT e.Emp_ID, e.Emp_Name, e.Emp_Manager_ID
FROM Employee AS e
INNER JOIN Subordinates AS sub ON e.Emp_Manager_ID = sub.Emp_ID
)
SELECT s.Emp_ID, s.Emp_Name, s.Emp_Manager_ID
FROM Subordinates AS s
关于SQL查询查找单个上级下的所有下级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351831/