我这里有一个Employee表是表结构
Name varchar
GUID numeric
ParentGUID numeric
这是一些示例数据
NAME GUID ParentGUID
ABC 1 NULL
BCD 2 1
xyz 3 2
PQR 4 2
MRS 5 3
此表包含Employee和manager的大型层次结构。 我需要选择特定员工下的所有员工。 防爆。我需要所有受BCD影响的员工,所以结果应该是
xyz 3 2
PQR 4 2
这是我的递归查询。
;WITH CTE (Name, GUID, ParentGUID)
AS
(
select distinct B.Name , B.GUID, B.ParentGUID
FROM
EMP B with (nolock)
union All
select a.Name , a.GUID, a.ParentGUID
FROM EMP a with (nolock)
inner join CTE C with (nolock) on a.ParentGUID = c.GUID
)
select *
FROM CTE B with (nolock) where B.Name in ('BCD')
但它给了我错误。
Msg 4150, Level 16, State 1, Line 1
Hints are not allowed on recursive common table expression (CTE) references. Consider removing hint from recursive CTE reference 'CTE'.
你们有没有人可以帮我纠正这个问题。
答案 0 :(得分:1)
您的where B.Name in ('BCD')
是将结果集过滤到一行的内容。将其更改为以下内容,您应该得到您想要的结果:
;with cte (Name, GUID, ParentGUID)
as
(
select distinct B.Name
,B.GUID
,B.ParentGUID
from EMP B
where B.Name in ('BCD')
union All
select a.Name
,a.GUID
,a.ParentGUID
from EMP a
inner join CTE C
on a.ParentGUID = c.GUID
)
select *
from CTE