我对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”表的一部分,这对我来说是没用的:)我只是没有得到最后一步我怎么能总是得到特定的顶级老板。
感谢您的回复!
答案 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