【发布时间】:2011-04-21 17:15:28
【问题描述】:
这是我的一个查询,它返回员工的主管链,但它使用了一堆嵌套的 SELECT 语句。 我想知道这个查询是否可以被重构以提高效率。该查询适用于 3 级管理授权员工参加培训课程的应用程序。目前我们需要 3 个级别的批准,但这可能会更改为 4 个或更多。
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 语句?
-
我猜很容易维护。申请冠军可能会要求我获得 5 个级别的批准。 Mikes 在下面的回答可以轻松做到这一点。
标签: sql select nested query-optimization