SQL SERVER 2005的递归查询

SQL SERVER 2005的递归查询
 
项目中有用户组表UserGroup如下:

SQL SERVER 2005的递归查询_第1张图片
 
其中PID表示当前组的上级组
表数据如下:

SQL SERVER 2005的递归查询_第2张图片
 
现在想查询出顶级组[没有上级组叫顶级组]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 行受影响)
 

你可能感兴趣的:(数据库,递归查询)