当前位置: 代码迷 >> Sql Server >> 大年初二,咨询下数据库查询有关问题
  详细解决方案

大年初二,咨询下数据库查询有关问题

热度:29   发布时间:2016-04-24 18:35:28.0
大年初二,咨询下数据库查询问题
由于我对数据库不是很了解,可能描述的有点笨拙,希望大虾们能踊跃给予帮助
数据库是sqlserver 2000
用一张表存放用户和子用户
设计表有自增ID、用户名、用户ID

我先创建了个用户admin,它的自增ID为1,用户ID为1,作为超级用户

然后用admin穿件出的用户user,自增ID可能已经是10或者N,而它的用户ID为1(这里这么设计,是在日后的查询中,知道user用户的父ID是admin)

然后我用user创建用户,那么它所创建出的用户user1,自增ID已经是N,而它的用户ID是user的ID

现在的问题出来了,当我想统计admin下有多少个2级用户,而所有的2级用户下又有多少个n级用户

这要如何返回呢?可否用一个sql语句实现呢?






------解决方案--------------------
是这样吗:

建表语句:
--1.建表
create table users(
UserID   int,            --节点id
parentID int,            --父节点id
userName varchar(50) 
)

insert into users
select 1,0,'xxx' union all
select 20150,1,'xxx' union all
select 20151,1,'xxx' union all
select 20152,20150,'xxx' union all
select 20153,20150,'xxx' union all
select 20154,20151,'xxx' union all
select 20155,20151,'xxx' 
go


查询语句,包含了循环:

--2.定义表变量
declare @tb table
(
UserID   int,            --节点id
parentID int,            --父节点id
userName varchar(50), 
level int       --层级
)
  

--3.递归开始  
insert into @tb 
select *,1 as level
from users
where userid = 1


--4.递归的过程
while @@ROWCOUNT > 0
begin
    
    insert into @tb
select t1.userid,t1.parentid,t1.username,level + 1
from @tb t
inner join users t1
on t.userid = t1.parentid
    where not exists(select 1 from @tb t2 
                     where t.level < t2.level)
end


--5.最后查询
select *
from @tb t
where not exists(select 1 from users t1 where t1.parentid = t.userid)
/*
UserID parentID userName level
20152 20150 xxx 3
20153 20150 xxx 3
20154 20151 xxx 3
20155 20151 xxx 3
*/
  相关解决方案