SQL递归函数列出父级的所有子级(ID ParentID模式)
来源:互联网 发布:智行火车票小程序源码 编辑:程序博客网 时间:2024/05/17 07:07
--调用方法:
--select * from GetChild('24')
--select id from GetChild('24')
--select * from KuCun where ProductType in(select id from GetChild('24'))
Create function [dbo].[GetChild](@ID varchar(10))
returns @t table(ID varchar(10),ParentID varchar(10),Level int)
as
begin
declare @i int
set @i = 1
insert into @t select @ID,@ID,0 --当前级,本级,如果不要的话可以注释掉或再加个参数来选择操作
insert into @t select ID,ParentID,@i from Dept where ParentID = @ID
while @@rowcount<>0
begin
set @i = @i + 1
insert into @t
select
a.ID,a.ParentID,@i
from
Dept a,@t b
where
a.ParentID=b.ID and b.Level = @i-1
end
return
end
--------------------------------------------------------------------------------
--在SQL Server2005中其实提供了CTE[公共表表达式]来实现递归:
Declare @Id Int
Set @Id = 24; ---在此修改父节点
With RootNodeCTE(Id,ParentId)
As
(
Select Id,ParentId From Dept Where ParentId In (@Id)
Union All
Select Dept.Id,Dept.ParentId From RootNodeCTE
Inner Join Dept
On RootNodeCTE.Id = Dept.ParentId
)
Select * From RootNodeCTE
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--生成测试数据
create table Dept(ID int,ParentID int,msg varchar(20))
insert into Dept select 1,0,null
insert into Dept select 2,1,null
insert into Dept select 3,1,null
insert into Dept select 4,2,null
insert into Dept select 5,3,null
insert into Dept select 6,5,null
insert into Dept select 7,6,null
go
--创建用户定义函数
Create function [dbo].[GetChild](@ID varchar(10))
returns @t table(ID varchar(10),ParentID varchar(10),Level int)
as
begin
declare @i int
set @i = 1
insert into @t select @ID,@ID,0 --当前级,本级,如果不要的话可以注释掉或再加个参数来选择操作
insert into @t select ID,ParentID,@i from Dept where ParentID = @ID
while @@rowcount<>0
begin
set @i = @i + 1
insert into @t
select
a.ID,a.ParentID,@i
from
Dept a,@t b
where
a.ParentID=b.ID and b.Level = @i-1
end
return
end
--执行查询
select ID from dbo.GetChild(3)
go
--输出结果
/*
3
5
6
7
*/
--删除测试数据
drop function GetChild
drop table Dept
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- sql 递归函数,根据父级ID获取所有子级(含自己)
- Postgresql 中 根据ParentID 获取所有子 id
- 根据根据子id查询所有的父id,根据父id 递归查询所有下级,
- oracle 递归获取id和id的所有子机构
- mysql sql 根据父级id查询书所有的子孙级数据,或根据子级id查询对应的父级
- 递归查询所有子级
- php 无限递归查询子id 子类 根据父分类 父ID 查询所有子分类 子ID
- java 递归列出所有的目录
- 递归列出目录下的所有文件
- 递归列出目录中的所有文件,包括子文件夹
- 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName
- 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- Android中一个单行与多行并存的listview
- C/C++/Perl/汇编/Java效率比较
- adr和ldr
- The Traveling Salesman Problem
- Visual C++ Tips and Tricks
- SQL递归函数列出父级的所有子级(ID ParentID模式)
- OpenCV的SVM用法
- 设计模式与追MM
- scanf
- select()与pselect()
- 终于把AVX指令的memcpy 写完了 :)
- 如何将JAVA中的字符串转化成数字
- Kmeans思想
- 使用ActivityGroup实现Tab在底部