递归查询,没啥好说的,上代码
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 代数