递归sql(mysql)

注意:避免完成后直接没看到注意事项,所以写在前面,递归的终止条件,默认终止次数是1000,在第1001报以下错误,不过应该不会有这么深的层次结构

递归函数肯定都写过,递归sql就不一定了

有些场景可能就需要用到递归sql

with recursive p(n) as(
	select 1
	union all
	select n+1 from p where n<10
)
select  * from p;

这条sql就是所谓的递归sql了,with recursive 是一个递归的查询子句,他会把查询出来的结果再次代入到查询子句中继续查询。

这是比较笼统的,递归sql主要用于遍历层次结构比如地理位置省下有各个地级市,地级市由各个县级市跟区,我要查出这省内的各个县级市,就要用到递归sql

表结构如下

sql如下

with recursive p as (
    select id,address_name,address_name path  from address where id=1
    union all
    select a.id,a.address_name,concat(p.path,'->',a.address_name) from
      address a join p  on a.subordinate_id=p.id
)
select * from p;

实现效果图如下

切记union all的字段一定要保持一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值