使用CTE对多列进行筛选的SQL递归查询
我试图将查询1的输出作为查询2的输入。为了做到这一点,我使用了CTE(公共表表达式) 员工等级使用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
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列,您知道是什么导致查询速度变慢吗?