【问题标题】:Sql query to find the all subordinates under a single superiorsql查询查找单个上级下的所有下属
【发布时间】:2012-01-11 05:12:26
【问题描述】:

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

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 下所有下属的预期结果 所以结果应该是所有 EmpIDs 3,4,5,6,7 因为 2 是 3,4 的经理,3 是 6 的经理,4 是 5 的经理,5 是 7 的经理

【问题讨论】:

  • 我已更新我的答案以包含 CTE 工作的示例。如果您遇到其他问题,请告诉我。

标签: sql sql-server sql-server-2005 recursion common-table-expression


【解决方案1】:

使用Recursing CTE。这当前返回所有三列。如果您不需要这些信息,请从 SELECT 中删除 Emp_NameEmp_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

Example of query running using Employee_ID = 1:

【讨论】:

  • 问题已在我的表中解决,第一个 rown manager id 为 1,然后进入无限循环
猜你喜欢
  • 2012-01-21
  • 2015-09-20
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
相关资源
最近更新 更多