加载中...

公用表表达式(Common Table Expression,CTE)是 SQL:1999 标准引入的语法,使用 WITH 名称 AS (子查询) 在一条语句内定义临时命名结果集,后续查询可像引用表一样引用它。
CTE 的主要价值在于把嵌套子查询"拍平",使复杂查询按逻辑步骤书写,显著提升可读性与可维护性;同一 CTE 可在语句中多次引用,避免重复书写子查询。
WITH RECURSIVE 支持递归查询:由锚点成员(初始行)与递归成员(引用自身)组成,反复迭代直至不再产生新行。这是 SQL 处理树形与图状数据(组织架构、目录树、物料清单)的标准手段。
不同数据库对 CTE 的处理不同:有的默认将其物化为临时结果(可能阻碍谓词下推),有的会内联展开参与整体优化。PostgreSQL 12 起默认内联非递归 CTE,并提供 MATERIALIZED 关键字显式控制;MySQL 8.0 起支持 CTE。使用时需结合执行计划确认实际行为。

登录 后参与讨论
暂无讨论,来发表第一条评论吧