我有一种情况,我需要能够查看给定的人是否在用户/经理层次结构中。
我有表的下一个结构:
用户身份
用户名
经理 ID
我有 2 个 ID:一些 UserId(比如 5)和 ManagerId(比如 2)。因此,我需要知 Prop 有给定 ID (2) 的经理是否是具有给定 ID (5) 的用户的首席?例如,如果
结果 SQL 查询必须显示,对于 UserId = 4 和 ManagerId = 1,答案是正确的。
我刚刚创建了获取所有层次结构的查询:
WITH temp (level, UserName, UserId, ManagerId) AS
(
SELECT 1 AS level, EmployeeName, EmployeeId, BossId
FROM Employees
WHERE BossId IS NULL
UNION ALL
SELECT level+1 AS level, EmployeeName, EmployeeId, BossId
FROM Employees, temp
WHERE BossId = UserId
)
SELECT t.* from temp AS t
但是现在我不知道如何使用上述条件获取结果查询:(
在此先感谢您的帮助!
最佳答案
在 anchor 中找到用户并沿着您的方式回到层次结构。检查您在针对管理器的递归查询中获得的行。
如果存在,这将返回管理器行。
WITH temp AS
(
SELECT EmployeeName, EmployeeId, BossId
FROM Employees
WHERE EmployeeId = @UserID
UNION ALL
SELECT E.EmployeeName, E.EmployeeId, E.BossId
FROM Employees AS E
inner join temp AS T
ON E.EmployeeId = T.BossId
)
SELECT *
FROM temp
WHERE EmployeeId = @ManagerID
关于sql-server - 具有附加 EXISTS 条件的递归 CTE?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14666759/