使用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'
)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...