1

私はSQLにまったく慣れていないので、この状況についてあなたの助けが必要です。これは、ほとんどの人にとって基本的なことかもしれません。

私はテーブル「従業員」を持っています。これには、属性 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

しかし、次のレベルのボスIDはすでにテーブル「従業員」の一部であるため、これは私にはまったく役に立ちません:)特定のトップレベルのボスを常に取得する方法の最終ステップがわかりません。

返信ありがとうございます。

4

1 に答える 1

0

各行にトップボス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
于 2013-10-23T10:57:12.017 に答える