当前位置: 数据库>sqlserver
sql2005递归查询的例子
来源: 互联网 发布时间:2014-08-29
本文导语: sql2005递归查询 sql递归查询的例子。 数据表:groups,包含上下级关系,通过code和parentcode对应,code是本身的标记,parentcode是父节点的标记。 以下的方法,可以产生类似树状的表。 有意研究sql递归查询的朋友,可以参考下。 ...
sql2005递归查询 sql递归查询的例子。
数据表:groups,包含上下级关系,通过code和parentcode对应,code是本身的标记,parentcode是父节点的标记。
以下的方法,可以产生类似树状的表。
有意研究sql递归查询的朋友,可以参考下。
代码示例:
---sql www.
with myTb(groupname,parentname,[level])
as(
select groupname,parentname,1 as level from groups Where parentcode=''
union all
select b.groupname,b.parentname,[level]+1 as [level]
from myTb inner join groups b
on myTb.code=b.parentcode)
select * from myTb
with myTb(groupname,parentname,[level])
as(
select groupname,parentname,1 as level from groups Where parentcode=''
union all
select b.groupname,b.parentname,[level]+1 as [level]
from myTb inner join groups b
on myTb.code=b.parentcode)
select * from myTb
注意:
以上脚本在sql server 2005可以执行。
sql server 2000需要自写存储过程,然后递归生成。
union all前面是要找到根节点,后面是显示其子节点
连接关系是myTb.code=b.parentcode,顺序不能错位,
level是显示节点位于第几层,从1开始。
另附:oracle的写法:
代码示例:
select level,a.* from groups
start with parentcode is null
start with parentcode is null
是不是简单多了,oracle为什么牛,没道理啊。