使用CTE对多列进行筛选的SQL递归查询

使用CTE对多列进行筛选的SQL递归查询,sql,sql-server,subquery,common-table-expression,recursive-query,Sql,Sql Server,Subquery,Common Table Expression,Recursive Query,我试图将查询1的输出作为查询2的输入。为了做到这一点,我使用了CTE(公共表表达式) 员工等级 DEPT ID MANAGER1 MANAGER2 MANAGER3 Sales A234 10389 19400 3049 HR F394 29489 20403 Null IT H339 A234 IT

我试图将查询1的输出作为查询2的输入。为了做到这一点,我使用了CTE(公共表表达式)

员工等级

DEPT     ID     MANAGER1     MANAGER2     MANAGER3
Sales    A234   10389               19400               3049
HR       F394   29489               20403               Null
IT       H339   A234
IT       S599   39009               A234
预期产出

DEPT     ID     MANAGER1     MANAGER2     MANAGER3
IT       H339   A234
IT       S599   39009               A234
问题: 确定销售部门经理的直接下属。在上面的示例中,ID234来自销售部门。由于A234由直接经理1和直接经理2管理,因此他的直接下属都在IT部门

WITH CTE AS(
SELECT ID from Employee_Hierarchy
WHERE DEPT='Sales'
)
SELECT DEPT, ID 
FROM Employee_Hierarchy

但是我不知道CTE的连接条件,我认为不需要递归。似乎一个相关子查询就足够了:

select e.*
from employee_hierarchy e
where exists(
    select 1
    from employee_hierarchy m
    where 
        m.id in (e.manager_id1, e.manager_id2, e.manager_id3)
        and m.dept = 'Sales'
)

我认为这不需要递归。似乎一个相关子查询就足够了:

select e.*
from employee_hierarchy e
where exists(
    select 1
    from employee_hierarchy m
    where 
        m.id in (e.manager_id1, e.manager_id2, e.manager_id3)
        and m.dept = 'Sales'
)

看起来你需要先修改设计,为什么你有3个经理栏呢?可悲的是,这就是人的软性:(.这就是经理的层次结构,例如:3049是A234的经理,19400是3049的经理,10389是19400的经理。看起来你需要先修改设计,为什么你有3个经理栏呢?可悲的是,人的软性就是这样的:(.这是管理者层次结构,例如:3049是A234的管理者,19400是3049的管理者,10389是19400的管理者如果我添加
e.Manager\u id2,e.Manager\u id3
你知道如果我包含多个Manager\u id列,会导致查询速度变慢吗?如果我添加
查询会花费很多时间执行>e、 manager\u id2,e.manager\u id3
如果我包含多个manager\u id列,您知道是什么导致查询速度变慢吗?