代码之家  ›  专栏  ›  技术社区  ›  user2910467

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

  •  1
  • user2910467  · 技术社区  · 12 年前

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

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

    现在我想要一个表,它列出了员工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已经是“员工”表的一部分,这对我来说非常无用:)我只是不知道如何总是得到特定的顶级老板。

    感谢您的回复!

    1 回复  |  直到 12 年前
        1
  •  0
  •   Caleth    12 年前

    您可以在每一行中包括Top Bosses ID

    例如

    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