应用场景
with recursive常用于建立一个完整的序列,它是一个递归的查询子句,会把查询出来的结果再次代入到查询子句中继续查询直到满足一定的停止条件
基本语法
with recursive table_A(column_A,column_B,column_C) as ( select a as column_A,b as column_B,c as column_C [form XXX] union all select column_A+1, column_B-1,column_C from table_A where 停止条件 )
- 基本形式与with as相同,都是创建一个临时表供后续查询使用
- with recursive后接临时子查询的名称,括号内写字段名称
- 第一行是递归表的初始行,可以是自己编的数也可以是从其他表中取的数
- 第二行是union all
- 第三行是递归运算行,从第一行的数据开始不断循环,对特定的字段进行递归计算,此处示例为column_A和column_B,column_C则保持不变
- 第三行的where要接循环终止条件,当达到什么条件时,不再继续递归计算,输出最终的表
完整示例
with recursive s(id) as ( select max(customer_id) as id from Customers union all select id-1 from s where id>1 )输出结果:生成的表s包含字段id,该id列为Customers表中的最大id,减1一直到1为止