我有一种情况,我需要能够查看给定的人是否在用户/经理层次结构中。
我有表的下一个结构:
用户身份
用户名
经理 ID

我有 2 个 ID:一些 UserId(比如 5)和 ManagerId(比如 2)。因此,我需要知 Prop 有给定 ID (2) 的经理是否是具有给定 ID (5) 的用户的首席?例如,如果

  • 用户 1 向用户 2 报告。
  • 用户 3 向用户 1 报告。
  • 用户 4 向用户 3 报告

  • 结果 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/

    10-13 02:05