【发布时间】:2009-07-28 09:22:57
【问题描述】:
我有一个标准的老板/下属员工表。我需要选择一个老板(由 ID 指定)和他的所有下属(及其下属等)。不幸的是,现实世界的数据中有一些循环(例如,两个公司所有者都将对方设置为他们的老板)。带有 CTE 阻塞的简单递归查询(超过最大递归级别 100)。员工还能选吗?我不在乎它们被选中的顺序,只关心它们中的每一个都被选中一次。
补充:你想要我的查询吗?嗯......好吧......我虽然很明显,但是 - 这里是:
with
UserTbl as -- Selects an employee and his subordinates.
(
select a.[User_ID], a.[Manager_ID] from [User] a WHERE [User_ID] = @UserID
union all
select a.[User_ID], a.[Manager_ID] from [User] a join UserTbl b on (a.[Manager_ID]=b.[User_ID])
)
select * from UserTbl
添加 2: 哦,如果不清楚 - 这是一个生产系统,我必须做一些升级(基本上是添加一种报告)。因此,如果可以避免,我宁愿不修改数据。
【问题讨论】:
-
/你能发布你的查询吗?
标签: sql sql-server recursion loops common-table-expression