有这样一个表及记录如下: USGP_SID USGP_PID USGP_NAME
用户组ID          用户组父id 用户组名称USGP000001 -1         系统管理员
USGP000002 USGP000001 用户管理员
USGP000003 USGP000001 新闻管理员
USGP000009 USGP000001 用户
USGP000004 USGP000009 VIP用户
USGP000005 USGP000009 普通用户需求:这个表是有层次的树状结构.....我想得到某一个用户组所管理的所有用户组.....如系统管理员下的所有用户组...请这个sql语句怎么写........在线等待................谢谢各位大虾先!!!!

解决方案 »

  1.   

    --提供sql server 的写法供参考.
    --查找指定节点的所有子节点的示例函数
    --测试数据
    CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
    INSERT tb SELECT '001',NULL ,'山东省'
    UNION ALL SELECT '002','001','烟台市'
    UNION ALL SELECT '004','002','招远市'
    UNION ALL SELECT '003','001','青岛市'
    UNION ALL SELECT '005',NULL ,'四会市'
    UNION ALL SELECT '006','005','清远市'
    UNION ALL SELECT '007','006','小分市'
    GO--查询指定节点及其所有子节点的函数
    CREATE FUNCTION f_Cid(@ID char(3))
    RETURNS @t_Level TABLE(ID char(3),Level int)
    AS
    BEGIN
    DECLARE @Level int
    SET @Level=1
    INSERT @t_Level SELECT @ID,@Level
    WHILE @@ROWCOUNT>0
    BEGIN
    SET @Level=@Level+1
    INSERT @t_Level SELECT a.ID,@Level
    FROM tb a,@t_Level b
    WHERE a.PID=b.ID
    AND b.Level=@Level-1
    END
    RETURN
    END
    GO--调用函数查询002及其所有子节点
    SELECT a.*
    FROM tb a,f_Cid('002') b
    WHERE a.ID=b.ID
    /*--结果
    ID   PID  Name       
    ------ ------- ---------- 
    002  001  烟台市
    004  002  招远市
    --*/
      

  2.   

    Oracle 数据库.....拜托各位英雄帮帮我吧!!!
      

  3.   

    Oracle 数据库!!!请各位英雄帮帮我!!! 
      

  4.   

    SELECT * FROM TABLENAME START WITH USGP_SID=' ' CONNECT BY  USGP_SID =USGP_PSID

    SELECT * FROM TABLENAME START WITH USGP_SID=' ' CONNECT BY   USGP_PSID=USGP_SID
      

  5.   

    谢谢楼上的大哥, 这个connect by 可能存在一定的问题,如下数据:USGP000001 -1         系统管理员 
    USGP000002 USGP000001 用户管理员 
    USGP000003 USGP000001 新闻管理员 
    USGP000009 USGP000001 用户 
    USGP000004 USGP000009 VIP用户 
    USGP000005 USGP000009 普通用户 
    "VIP用户组"为"用户组" 下的子用户组 , 没有"系统管理员"用户组的编号, 就关联不出来.........请大家多多关注小弟的问题.....谢谢了先!!!!!
      

  6.   

    to , hongbinchen ,      谢谢, 正解!!!