with as 子查询
( CTE语句 )语法
CTE的结构包括名称,可选列列表和定义CTE的查询。CTE定义后,您可以使用它像一个视图SELECT,INSERT,UPDATE,DELETE,或CREATE VIEW语句。
with cte_name [ column_list] as (
cte_query_definition
)
[ SELECT| INSERT | UPDATE | DELETE]
理解 :
cte_query_definition : 是 select语句 ;
cte_name :是 cte_query_definition 查询语句的名称;
可以把 with as() 当成一个视图,cte_name 是视图名,cte_query_definition 是视图查询语句。
【注意】with as () 后面必须跟着 [ SELECT| INSERT | UPDATE | DELETE] 语句,否则报错。
with recursive as 递归
WITH recursive cte_name AS (
初始语句(非递归部分)
UNION ALL
递归部分语句
)
[ SELECT| INSERT | UPDATE | DELETE]
理解 :
初始语句 :就是第一次给 cte_name ( 相当于 视图名 或 表名 )
递归部分语句 :当 cte_name 的值 发生改变时,就会执行 此递归语句;而 此递归语句会把 其执行> 结果重新赋值给 cte_name,直到达到此递归语句的结束条件 。cte_name 每一次的重新赋值,都会使 with recursive AS( )后面的 [ SELECT| INSERT | UPDATE > | DELETE] 语句执行一次。
而最终结果就是 多次 [ SELECT| INSERT | UPDATE | DELETE] 语句执行结果的合集。