1

我对 sql 很陌生,在这种情况下我需要你的帮助,这对你们大多数人来说可能是基本的东西:

我有一个表“Employee”,其中包含属性 ID 和 BOSS_ID。顶级boss的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

但是由于下一级老板 id 已经是“员工”表的一部分,这对我来说毫无用处:) 我只是没有完成最后一步,我总是能得到特定的顶级老板。

谢谢您的回复!

4

1 回答 1

0

You can include the Top Bosses ID in each row

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
于 2013-10-23T10:57:12.017 回答