sql server
详细
mysql CTE
CTE 是一个命名的临时结果集,作用范围是当前语句。CTE可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的,CTE可以引用其他CTE,但子查询不能引用其它子查询。所以,开发中建议CTE代替子查询,效率比子查询高
CTE 相当于 是 会话级别的 用户变量
子查询 相当于 局部变量的。
CTE 分两种
- 普通公用表表达式
- 递归公用表达式
普通CTE
with CTE 名称
as
( 子查询 )
递归CTE
with recursive CTE 名称
as
( 子查询 )递归公用表表达式由2部分组成分别是种子查询和递归查询。中间用关键字 UNION [ALL] 连接
种子查询,是递归的初始值,这个查询只会运行一次,已创建初始数据集,之后递归查询会一直执行,直到没有任何新的查询数据产生,递归返回。
优点
公用表表达式的作用是可以替代子查询,而且可以被多次引用。
递归CTE 对查询有一个共同的根节点的树形结构数据非常高效。
比如 菜单数据表, 员工组织架构表