首页/数据/SQL 速查/CTE:WITH 公共表表达式
本包目录(311 条)

CTE:WITH 公共表表达式

用 WITH 给子查询起名字,把多层查询拆成可读的步骤;MySQL 8.0+ 与 PostgreSQL 均支持,作用域限于紧随的语句。

SQL 速查数据更新于 2026-10-12

示例

示例
WITH paid AS (
    SELECT user_id, SUM(amount) AS total
    FROM orders
    WHERE status = 'paid'
    GROUP BY user_id
)
SELECT u.id, u.name, paid.total
FROM users u
JOIN paid ON paid.user_id = u.id
WHERE paid.total > 1000;
作用域只对紧随其后的一条语句有效
优点可读性、复用中间结果
版本MySQL 8.0+;PostgreSQL 8.4+

易错点

  • MySQL 8.0 之前不支持 WITH 写法,需要改写成派生表
  • CTE 名与真实表重名时优先解析 CTE,命名加前缀更清晰

数据来源与参考

  • MySQL 8.0 Reference Manual · WITH (Common Table Expressions)
  • PostgreSQL Documentation · WITH Queries
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌