SQLSERVER的递归查询

 
项目中有用户组表UserGroup以下:
其中PID表示当前组的上级组
表数据以下:
如今想查询出顶级组[没有上级组叫顶级组]A1组的全部子孙组ID,SQL以下:
[sql]  www.2cto.com 
--查询子节点 
with  
    RTD1 as( 
select id ,pid from UserGroup
    ), 
    RTD2 as( 
        select * from RTD1 where id=6 
        union all 
        select RTD1.* from RTD2 inner join RTD1  
        on RTD2.id=RTD1.PID 
    ) 
select * from RTD2 
  www.2cto.com 
查询结果以下:
id          pid
----------- -----------
6           NULL
17          6
18          6
20          6
21          20
22          20
23          20
24          20
29          20
25          23
26          23
28          26
27          25
(13 行受影响)
 
如今想查询出A1-B3-C3-D2组的全部上级组ID,SQL以下:
[sql]
--查询父节点 
with  
    RTU1 as( 
        select id ,pid from UserGroup 
    ), 
    RTU2 as( 
        select * from RTU1 where id=26 
        union all 
        select RTU1.* from RTU2 inner join RTU1  
        --on myT2.id=myT.PID 
        on RTU2.PID=RTU1.ID 
    )    www.2cto.com 
select * from RTU2 
 
查询结果以下:
id          pid
----------- -----------
26          23
23          20
20          6
6           NULL
(4 行受影响)
相关文章
相关标签/搜索