注意:避免完成后直接没看到注意事项,所以写在前面,递归的终止条件,默认终止次数是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的字段一定要保持一致