我有一个员工表,可以通过employeeid = managerid解除循环
我希望结果集中的内容是 {employeeid, 1-level-down-from-request}
如此给出
Employeeid - Managerid
Bob - Null
Jill - Bob
John - Bob
Suzy - Jill
Shannon - Jill
Shawn - Jill
Ron - John
Rick - John
Xavier - Shawn
如果我对 Bob 运行查询,我们会得到
Shannon - Jill
Shawn - Jill
Ron - John
Rick - John
Xavier - Jill
请注意,Xavier 去找了 Jill,而不是 Shawn,因为 Jill 是 Xavier 的高级经理(比 Bob 低一级)
最佳答案
最简单的方法可能是进行自连接
SELECT employee.employeeId,
employee.managerId
FROM table_name mgr,
table_name subordinate,
table_name employee
WHERE mgr.managerId = subordinate.employeeId
AND subordinate.managerId = employee.managerId
AND mgr.employeeId = 'Bob'
但是,构建分层查询会更高效、更通用。类似的东西
SELECT *
FROM (SELECT employeeId, managerId, level lvl
FROM table_name
START WITH employeeId = 'Bob'
CONNECT BY prior employeeId = managerId)
WHERE lvl = 3
显然,更改后一个查询来更改您是否需要直接报告、二级报告或层次结构的其他级别会更容易。而且通常也会更加高效。
关于oracle递归查询经理下的员工,将经理降一级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865131/