SQL之递归

灯灯灯凳~~今天要跟大家分享的是SQL中的递归,递归貌似在SQL语句中并不常用到,之前大多都采用游标or临时变量+临时表来完成递归,其实:使用CTE来完成递归,更为强大。

CTE=公用表表达式
它具有一个重要的优点:能够引用其自身,从而创建递归CTE。
递归CTE是一个重复执行初始CTE以返回数据子集直到获取完整结果集的公用表表达式。
当某个查询引用递归 CTE 时,它即被称为递归查询。

话不多说,直接案例~有这么一个经典场景:一个完整地区表,如何查询某个省市及其下的所有市县?

【完整地区表如下】

 

【查询出“广东省”及其下所有市县】

with
cte
AS
(

select [ID],[Name],[FK_ConstDict_ID],[ParentId],1 AS [Level]
from ConstDictValues
where  name = '广东省'
union all
select s1.[ID],s1.[Name],s1.[FK_ConstDict_ID],s1.[ParentId],[Level]+1
from ConstDictValues s1
inner join cte s2
on s1.ParentId=s2.ID

)
select * from cte

【查询出“珠海市”及其下所有市县】

cte中支持递归和非递归式的查询,更强大的是支持insert,update和delete操作,这样也会对源表生效!

记住:对cte的写操作,不可同时操作多张表,只能写一张表。

4



微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

SQL之递归
嘿!有什么能帮到您的吗?
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close