
已解决问题
谷歌ayvefskqc用户在2016.04.16提交了关于“永兴岛SQL**库实现递归查询的几种代码方法”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-03-19T21:21:16。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
SQL**库实现递归查询的几种代码方法
表
Pro**ctC
CategoryID,Level,ParentCa
**
1,
2,1,-1
3,2
4,3,3
5,2,2
6,4,5
T-SQL
WITh**Cat
**LECTCategoryID,Pare
**LECTpc.CategoryID,ParentCategoryIDFRO
LEFTJOINCategoryTempctONpc
Wh**EREParentCategoryID>0--因为第一层前面已经查出来了,所以这里把第一层
)
**LECTCa
结果
1,-1
2,-1
3,1
4,3
5,
6,5
如果把ParentCategoryID赋为2,结果则
5,2
6,5
实例
ID
1y部门01
31y部门11
32n张三31
33n李二31
34y部门231
3
35y部
36n**35
我
--创建查询函数
cre
@idint--要查询的id
)
as
begin
de
set@l=0
from表
where上级id=@id
while@@rowc
begin
set@l=@l+1
insert@reselecta.i
from表ajoin@rebona
end
return
end
go
--
selecta.*from表ajoinf_id(35)bona.id=b.id
联合查询
--测试**
createtable表(IDint,是否为部门char(1),部门名varchar(10),上级IDint)
insert表select1,'y','部门0',1
unionallselect31,'y','部门1',1
unionallselect32,'n','张三',31
unionallselect33,'n','李二',31
unionallselect34,'y','部门2',31
unionallselect35,'n','王五',34
unionallselect35,'y','部门3',34
unionallselect36,'n','**',35
go
--创建查询函数
createfunctionf_id(
@idint--要查询的id
)returns@retable(idint,levelint)
as
begin
declare@lint
set@l=0
insert@reselectid,@l
from表
where上级id=@id
while@@rowcount>0
begin
set@l=@l+1
insert@reselecta.id,@l
from表ajoin@rebona.上级id=b.idandb.level=@l-1
end
return
end
go
--调用函数进行查询
selecta.*from表ajoinf_id(35)bona.id=b.id
go
--删除测试
droptable表
dropfunctionf_id
/*--测试结果
ID是否为部门部门名上级ID
-------------------------------------
36n**35
(所影响的行数为1行)