我的数据如下所示
employeeId ManagerId
3 2
4 2
2 1
5 1
6 3一个雇员有一个经理,那个经理会/可以有一个经理。我想做的是让员工的经理和经理的经理,如果它是可用的。
例如,对于雇员6,结果是3& 2,而对于雇员2,结果是1。
这里的关键要求是,如果可用的话,查询应该返回最少一个管理器,并且最大返回两个级别,而不是更高。为员工6提供的示例说明了这一点。
现在我的查询看起来,
select a.managerId firstManager,b.ManagerId secondManager
from (
select managerId from Results where employeeId = 6 ) a
join
(select managerId from Results where employeeId in (select managerId from Results where employeeId = 6 ) )b ;我的查询适用于员工6,但不适用于员工2. [医]小提琴。
发布于 2020-09-27 06:49:25
您可以使用递归cte进行以下操作:演示
with RECURSIVE t as
(
select employeeid,managerid from Results where employeeid=6
union all
SELECT e.employeeid,e.managerid from Results e inner join t t1 on e.employeeid = t1.managerid
)
select * from t order by managerid desc limit 2发布于 2020-09-27 06:41:25
你可以做一个自我连接,你会得到你所需要的结果。dbfiddle
Select a.employeeId,
a.ManagerId First_Manager,
b.ManagerId Second_Manager
from Results a
left join Results b
on a.ManagerId = b.employeeId输出:
EmployeeId First_Manager Second_Manager
3 2 1
4 2 1
2 1 null
5 1 nul
6 3 2https://stackoverflow.com/questions/64085530
复制相似问题