首页 > 解决方案 > SQL 递归查询以查找缺少级别的经理下属

问题描述

考虑下Associate表:

Id |  Name |  ManagerId
---+-------+------------
1  |  A    |   Null         
2  |  B    |   1            
3  |  C    |   2             
4  |  D    |   3            
5  |  E    |   3            
6  |  F    |   3            

这里有 CEO (A)、经理 (B)、团队负责人 (C) 和团队成员 (D, E, F)。

另一个表 Registration 包含已注册保险的员工:

Id |  Number of Family Members
---+--------------------------
3  |  3        
4  |  2       
6  |  2

我需要一个递归查询来获取CEO下的所有注册员工,前提是一些下属还没有注册。

标签: sqlsql-serverrecursive-query

解决方案


根据您的输入,查询是。

; WITH recursive_CTE (id,name,MANAGERID,CEONAME,CEO)
 AS(
 SELECT  ID,name,MANAGERID,name ,ID FROM ASSOSIATETABLE WHERE MANAGERID IS NULL
    UNION  ALL
 SELECT B.ID,B.name,B.MANAGERID,A.CEONAME,A.CEO FROM recursive_CTE  A
 INNER JOIN ASSOSIATETABLE  B ON A.ID=B.ManagerID 
 )

 SELECT * FROM recursive_CTE
 WHERE ID NOT IN (SELECT ID FROM Registration ) 
 AND MANAGERID IS NOT NULL

结果中需要 CEO,请删除“AND MANAGERID IS NOT NULL”


输出


提琴手输出


推荐阅读