首先了解with用法,with相当于对sql的执行结果临时起一个别名,以便于之后的select使用。
with recursive tablename([col1]) as ( SQL )
这里目的是对SQL的执行结果赋给tablename,执行结果的字段类型和数量要和tablename声明的字段[col1]类型和数量一致
SQL的格式: 初始值 union all 递归sql
初始值:可以是一个select SQL 也可以是具体值,同样这个值的字段数量、类型要与tablename声明的字段[col1]类型和数量一致
递归sql:select 后面的字段名要与tablename声明的字段[col1]类型和数量一致,且其中一个或多个字段要作为循环体,比如col1 - 1
一定要有where语句 where里一定要写循环终止条件
示例:
表结构,fid、fparent_id 是父子结构关系
SQL代码如下
with recursive cte as (
select
fid,
name,
fparent_id
from
t_system_menu
where
fdeleted = 0
and fid = 'c70cf6a4a0e2cd4a7e78305a748907f5'
union all
select
t1.fid,
t1.name,
t1.fparent_id
from
t_system_menu t1,
cte
where
t1.fparent_id = cte.fid
and t1.fdeleted = 0)
select
*
from
cte