【发布时间】:2020-02-10 23:11:39
【问题描述】:
我有两个包含员工姓名 (TableB) 和员工层次结构 (TableA) 的表(TableA 中的 manager_id 可以是同一张表中的员工 ID)。
TableA
UniqueId Employee_ID Manager_ID
1 101 102
2 102 103
3 103 104
4 105 106
5 106 null
TableB
Employee_ID Employee_Name
101 First
102 Second
103 Third
104 Fourth
105 Fifth
106 Sixth
我需要如下输出:
Employee_ID Employee_Name Transferred
101 First True
102 Second True
103 Third True
105 Fifth False
106 Sixth False
每个员工的已调动列计算为 =
isTransferred(Employee_ID)
{
If(Manager_ID is null) return false;
If(Manager_ID is present as employee_id in table A)
{
return isTransferred(manager_ID)
}
else
{
return true;
}
}
有没有办法在一个 select 语句中得到结果?
【问题讨论】:
-
为什么员工 104 不在结果集中?
-
@GMB Row with 104 as employee_id 在 TableA 中不存在。输出应该只包含 TableA 的employee_ids。
-
第六个没有被转移,因为他们没有老板第五个没有转移,因为他们的老板(106)在表B中并且没有转移第三个是......哦,不,我们需要检查boss(104) 104,Fourth,因为boss不在TableB所以转了Third,因为boss(104)在TableB但是转了。好问题。我看到发布了一个答案,但我必须自己想出一个答案。
-
我一直在玩这个来回,我真的认为你不会在 vanilla SQL 中发生这种情况,因为员工/经理树可以是任意深度的。我很想看看是否有人想出了一个可行的方法,但我现在看不到它正在发生。我稍后会玩它,看看我是否能找到解决方案或证明它无法完成。
标签: sql oracle recursive-query