出售域名 11365.com.cn
有需要请联系 16826375@qq.com
在手机上浏览
在手机上浏览

记一则SQL的递归实现

发布日期:2023-02-17

递归查询,没啥好说的,上代码

create table 家族
(
	主键 int identity(1,1) primary key,
	父亲 nvarchar(50) not null,
	儿子 nvarchar(50) null
)

go

insert into 家族 
select '张大','张二' union all
select '张大','张三' union all
select '张大','张四' union all
select '张二','张二一' union all
select '张二','张二二' union all
select '张二','张二三' union all
select '张四','张四一' union all
select '张二三','张二三一' union all
select '张二三','张二三二'

go

第一个查询

--求张大的所有子孙
with 族谱 as
(
	select 父亲,儿子,代数=1 from 家族 where 父亲='张大'
	union all
	select b.父亲,b.儿子,代数=a.代数 1 from 族谱 as a inner join 家族 as b on a.儿子=b.父亲
	where a.代数<=2
)
select distinct * from 族谱 order by 代数

第二个查询

--求张二的所有子孙
with 族谱 as
(
	select 父亲,儿子,代数=1 from 家族 where 父亲='张二'
	union all
	select b.父亲,b.儿子,代数=a.代数 1 from 族谱 as a inner join 家族 as b on a.儿子=b.父亲
)

select distinct * from 族谱 order by 代数