有这样一个表及记录如下: USGP_SID USGP_PID USGP_NAME
用户组ID 用户组父id 用户组名称USGP000001 -1 系统管理员
USGP000002 USGP000001 用户管理员
USGP000003 USGP000001 新闻管理员
USGP000009 USGP000001 用户
USGP000004 USGP000009 VIP用户
USGP000005 USGP000009 普通用户需求:这个表是有层次的树状结构.....我想得到某一个用户组所管理的所有用户组.....如系统管理员下的所有用户组...请这个sql语句怎么写........在线等待................谢谢各位大虾先!!!!
用户组ID 用户组父id 用户组名称USGP000001 -1 系统管理员
USGP000002 USGP000001 用户管理员
USGP000003 USGP000001 新闻管理员
USGP000009 USGP000001 用户
USGP000004 USGP000009 VIP用户
USGP000005 USGP000009 普通用户需求:这个表是有层次的树状结构.....我想得到某一个用户组所管理的所有用户组.....如系统管理员下的所有用户组...请这个sql语句怎么写........在线等待................谢谢各位大虾先!!!!
--查找指定节点的所有子节点的示例函数
--测试数据
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 招远市
--*/
或
SELECT * FROM TABLENAME START WITH USGP_SID=' ' CONNECT BY USGP_PSID=USGP_SID
USGP000002 USGP000001 用户管理员
USGP000003 USGP000001 新闻管理员
USGP000009 USGP000001 用户
USGP000004 USGP000009 VIP用户
USGP000005 USGP000009 普通用户
"VIP用户组"为"用户组" 下的子用户组 , 没有"系统管理员"用户组的编号, 就关联不出来.........请大家多多关注小弟的问题.....谢谢了先!!!!!