sql 循环递归

Recursion in sql with loop

我有一个table,

那里有用户,每个用户都有主管。然而,首席执行官没有主管,他是自己的主管。 (即 CEO 的 supervisiorid 是 CEO 的 UserId)

我需要查找给定用户 ID 下所有下属的列表。我正在使用以下查询。

WITH CTE_EMPLOYEE_HEIRARCHY AS
(
    SELECT E.UserId, E.SupervisiorId AS Supervisor, d.DepartmentName,d.DepartmentId
    FROM T_BIT_Users  E with (nolock) inner join T_BIT_Department d with (nolock) on d.DepartmentId=e.DepartmentId  WHERE E.UserId = 13

    UNION ALL

    SELECT E1.UserId,  E1.SupervisiorId  AS Supervisor,d.DepartmentName,d.DepartmentId
    FROM CTE_EMPLOYEE_HEIRARCHY  
    JOIN T_BIT_Users E1 
    ON E1.SupervisiorId = CTE_EMPLOYEE_HEIRARCHY.UserId
       inner join T_BIT_Department d on d.DepartmentId=e1.DepartmentId)
SELECT  * FROM CTE_EMPLOYEE_HEIRARCHY
OPTION  ( MAXRECURSION 0 )

这会一直循环下去。

有什么建议吗?

只是限制递归部分排除where supervisorId = userId

SELECT E1.UserId,  E1.SupervisiorId  AS Supervisor,d.DepartmentName,d.DepartmentId
FROM CTE_EMPLOYEE_HEIRARCHY  
JOIN T_BIT_Users E1 
ON E1.SupervisiorId = CTE_EMPLOYEE_HEIRARCHY.UserId
   inner join T_BIT_Department d on d.DepartmentId=e1.DepartmentId
WHERE E1.SupervisorId != E1.UserId # <-- here