首页/数据/SQL 速查/多个 CTE 与互相引用
本包目录(311 条)

多个 CTE 与互相引用

一条 WITH 里可以定义多个 CTE(逗号分隔);后定义的可引用先定义的,形成流水线式查询结构,不允许循环引用。

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

示例

示例
WITH
active_users AS (
    SELECT id, name FROM users WHERE status = 1
),
big_orders AS (
    SELECT user_id, SUM(amount) AS total
    FROM orders
    WHERE amount > 100
    GROUP BY user_id
)
SELECT a.id, a.name, b.total
FROM active_users a
JOIN big_orders b ON b.user_id = a.id
ORDER BY b.total DESC;
数量一次 WITH 可定义多个,逗号分隔
引用后定义引用先定义;不允许环
递归自引用需要 WITH RECURSIVE

易错点

  • CTE 相互引用成环会直接报错,拆分步骤时保持单向依赖
  • 只使用一次的 CTE 不必然更快,物化与否由优化器决定

数据来源与参考

  • MySQL 8.0 Reference Manual · WITH Clause
  • PostgreSQL Documentation · WITH Queries
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌