下面是一个查询,它为员工返回主管链,但它使用了一堆嵌套的SELECT语句。 我想知道这个查询是否可以被重构为更有效率。该查询适用于3级管理授权员工参加培训课程的应用程序。目前我们需要3个级别的批准,但是这可能会更改为4个或更多。优化Oracle SQL查询
SELECT badge as employee,
supervisor_badge as boss1,
(select supervisor_badge FROM hr_data level2 WHERE badge = level1.supervisor_badge) as boss2
(select supervisor_badge FROM hr_data level3 WHERE badge =
(select supervisor_badge FROM hr_data level2 WHERE badge = level1.supervisor_badge)) as boss3
FROM hr_data level1 WHERE BADGE = '123456';
徽章=雇员的ID
supervisor_badge =
博特字段是hr_data表员工的主管的徽章
badge supervisor_badge
123456 111111
111111 454545
454545 332211
输出
employee boss1 boss2 boss3
123456 111111 454545 332211
你想让它运行得更快吗?还是希望它更加动态?所以你的关卡可以增长而不需要改变select语句? – Niklas 2011-04-21 17:27:03
我觉得很容易维护。申请专家可能会要求我有5个级别的批准。下面的Mikes答案可以很容易地做到这一点。 – jeff 2011-04-21 18:36:52