使用CTE对多个列进行过滤的SQL递归查询

问题描述

我正在尝试将查询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

问题: 确定销售部门经理的直接报告。在上面的示例中,ID 234来自销售部门。由于A234位于DIRECT_MANAGER1和DIRECT_MANAGER2下,因此他的直接报告在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'
)