前言

CTE也就是common table
expressions是sql标准里的语法,很多数据库都能够支持,MySQL也在8.0版本里加入了CTE功能,本文主要简单的介绍下该语法的用法,由于笔者对server层了解不深,本文不探讨代码层

CTE与derived table最大的不同之处是

* 可以自引用,递归使用(recursive cte
* 在语句级别生成独立的临时表. 多次调用只会执行一次
* 一个cte可以引用另外一个cte
一个CTE语句其实和CREATE [TEMPORARY]
TABLE类似,但不需要显式的创建或删除,也不需要创建表的权限。更准确的说,CTE更像是一个临时的VIEW

示例

语法:
with_clause: WITH [RECURSIVE] cte_name [(col_name [, col_name]