递归的sql查询返回特定的顶级老板

时间:2013-10-23 09:45:52

标签: sql recursion recursive-query

我对sql很陌生,我需要你帮助解决这个问题,这对大多数人来说可能是基本的东西:

我有一个表“Employee”,其中包括属性ID和BOSS_ID。 顶级老板的BOSS_ID为NULL。

现在我想要一张表,其中列出了员工ID以及特定顶级老板的ID。

我已经得到的是这个递归查询,它返回所有具有下一个更高级别老板ID的员工:

WITH TopBosses(ID,NAME, BOSS_ID)
AS
(
    SELECT ID,NAME, BOSS_ID
    FROM EMPLOYEE
    WHERE BOSS_ID IS NULL
    UNION ALL

    SELECT EMPLOYEE.ID,EMPLOYEE.NAME, EMPLOYEE.BOSS_ID
    FROM EMPLOYEE
    INNER JOIN TopBosses
        ON EMPLOYEE.BOSS_ID = TopBosses.ID
)
SELECT ID,NAME, BOSS_ID
FROM TopBosses

但是,由于下一级boss ID已经是“Employee”表的一部分,这对我来说是没用的:)我只是没有得到最后一步我怎么能总是得到特定的顶级老板。

感谢您的回复!

1 个答案:

答案 0 :(得分:0)

您可以在每行中包含热门老板ID

e.g。

WITH TopBosses(ID,NAME,BOSS_ID,TOP_ID)
AS
(
    SELECT ID,NAME,NULL AS BOSS_ID,ID AS TOP_ID
    FROM EMPLOYEE
    WHERE BOSS_ID IS NULL
    UNION ALL

    SELECT EMPLOYEE.ID,EMPLOYEE.NAME,EMPLOYEE.BOSS_ID,TopBosses.TOP_ID
    FROM EMPLOYEE
    INNER JOIN TopBosses
        ON EMPLOYEE.BOSS_ID = TopBosses.ID
)
SELECT ID,NAME,BOSS_ID,TOP_ID
FROM TopBosses