第一板块:玩转MySQL8.0新特性,4-1;4-2;4-3;4-4,董旭阳
第二,三板块:
通用表表达式:
(1)非递归CTE
(2)递归 CTE
如果某个 CTE 在子查询中引用了自己,就称为递归 CTE。
(3)递归限制
对于递归 CTE 而言,需要在递归
SELECT
部分包含一个终止递归的条件。系统变量 cte_max_recursion_depth 用于设置 CTE 递归的次数限制。如果 CTE 递归的次数超过了该变量的值,服务器将会强制终止语句的执行。
系统变量 max_execution_time 用于设置当前会话中查询语句的超时时间。
优化器提示 MAX_EXECUTION_TIME 用于设置当前查询语句的超时时间。
CTE语法
通用表表达式使用
WITH
子句进行定义,该子句可以包含一个或多个逗号分隔的从句。每个从句包含一个子查询,以及指定的名称。以下示例在WITH
子句中定义了两个 CTE:cte1 和
cte2,然后在顶层SELECT中进行引用: WITH cte1 AS (SELECT a, b FROM table1), cte2 AS (SELECT c, d FROM table2) SELECT b, d FROM cte1 JOIN cte2 WHERE cte1.a = cte2.c; //举例: -- 不适用CTE select * from (select 1) as dt; -- 使用CTE with dt as (select 1) select * from dt; //举例:递归 WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cte WHERE n < 5 ) SELECT * FROM cte; // 以上语句的执行结果是一个连续的数字序列: +------+ | n | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | +------+ // 举例限止递归 考虑以下递归 CTE,它没有包含递归终止条件 WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cte ) SELECT * FROM cte;
第四板块:
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦