在sql查询下查找单个上级下的所有下属

Mat*_*aul 5 sql sql-server recursion sql-server-2005 common-table-expression

我的表包含三列,值如下所示

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
Run Code Online (Sandbox Code Playgroud)

参数id @Emp_ID = 2找到给定Emp_Id下所有下属的预期结果,因此结果应该是所有EmpID,3,4,5,6,7 因为2是3,4的管理器,3是6的管理器,4是5的管理器和5是7的经理

Ada*_*ger 7

使用递归CTE.这当前返回所有三列.如果您不需要该信息Emp_Name,请Emp_Manager_ID从中删除SELECT.

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
Run Code Online (Sandbox Code Playgroud)

使用Employee_ID = 1运行查询的示例: