SQL Server CTE递归

时间:2015-09-07 16:40:58

标签: sql-server

我有一张表格,用于存储MemberIDInvitationToID

我想知道有多少成员在我之下,直到第六级。

MemberID    InvitedTO
--------    ---------
1           3         
1           2         
1           4         
2           a         
2           b         
3           c         
3           d         
a           aa        
b           bb        
aa          ccc 

如果我通过MemberID = 1,那么我应该得到3,2,4的所有孩子InvitationToID以及6级以下的孩子。

我使用此CTE但显示错误:

with Userct as
(
    select 
        ps.InvitedTO, ps.MemberID, 0 as steps 
    from 
        Pointsystem ps 
    where 
        ps.MemberID = '1'

    Union all

    select 
        Userct.InvitedTO, Userct.MemberID, Userct.steps + 1 
    from 
        Userct
)
select * 
from Userct er
inner join Pointsystem pr on pr.InvitedTO = er.MemberID

我怎样才能获得最高6级的所有邀请。

1 个答案:

答案 0 :(得分:2)

您需要在CTE中使用INNER JOIN 来启用递归:

with UserCTE as
(
    select 
        ps.InvitedTO, ps.MemberID, 0 as steps 
    from 
        Pointsystem ps 
    where 
        ps.MemberID = '1'

    Union all

    select 
        pr.InvitedTO, pr.MemberID, u.steps + 1 
    from 
        UserCTE u
    inner join 
        Pointsystem pr on pr.MemberID = u.InvitedTo
)
select * 
from UserCTE
where steps <= 6