SQL查询查找单个上级下的所有下级

标签 sql sql-server sql-server-2005 recursion 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

参数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_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:

关于SQL查询查找单个上级下的所有下级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351831/

相关文章:

sql-server-2008 - 如何在SQL中获取每组的最后一条记录

mysql - 将表结果作为文本列

sql - 在表的所有列中搜索某个值?

sql - SQL 的 DELETE 语句真的删除数据吗?

sql - 线程安全的sql事务,如何在事务期间锁定特定行?

sql - 如何在 SQL SERVER 中仅提取电子邮件 ID

asp.net - 在不输入任何内容的情况下模拟数据库中的记录

sql-server - 用于生成模式文本的 SQL 命令(类似于 CreateTo 或 AlterTo)

sql - 在 SQL 中创建查询时需要一些帮助吗?

sql - 填补 IDENTITY 列值的空白