You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整CTE语法以适配Azure Database for MySQL

解决Azure Database for MySQL中CTE查询的语法问题

问题背景

原在SQL Server上正常运行的CTE查询,迁移至Azure Database for MySQL后无法执行,报错提示SQL语法错误。原查询如下:

WITH cte_1 AS
(
  SELECT 
    1 AS col1, 
    2 AS col2

),

cte_2 AS
(
  SELECT 
    3 AS col3,
    4 AS col4

)

SELECT 
    normal_table.col0, 
    normal_table.col00,
    cte_1.col1,
    cte_1.col2,
    cte_2.col3,
    cte_2.col4
    
FROM normal_table

LEFT JOIN
    cte_1
        ON normal_table.col0 = cte_1.col1
        
LEFT JOIN
    cte_2
        ON normal_table.col0 = cte_2.col3

报错原因

Azure Database for MySQL的5.7及以下版本不支持WITH关键字定义的CTE,只有8.0及以上版本才兼容标准CTE语法。如果数据库版本低于8.0,就会触发该语法错误。

解决方案

方案1:升级数据库至MySQL 8.0及以上版本

若允许升级,直接将Azure Database for MySQL升级到8.0+版本,原CTE查询无需修改即可正常运行(注意排查其他SQL语法差异,但CTE部分完全兼容)。

方案2:用子查询替代CTE(适配5.7及以下版本)

若无法升级,将CTE改写为子查询形式,同时补上JOIN的关联条件(你之前的尝试缺少ON条件,这是导致语法错误的关键),正确写法如下:

SELECT 
    normal_table.col0, 
    normal_table.col00,
    cte_1.col1,
    cte_1.col2,
    cte_2.col3,
    cte_2.col4
FROM normal_table
LEFT JOIN (
    SELECT 
        1 AS col1, 
        2 AS col2
) AS cte_1 ON normal_table.col0 = cte_1.col1
LEFT JOIN (
    SELECT 
        3 AS col3,
        4 AS col4
) AS cte_2 ON normal_table.col0 = cte_2.col3

额外说明

如果使用的是MySQL 8.0+但仍报错,检查是否存在语法拼写错误(比如多余的逗号、括号),或确认数据库是否默认开启了CTE支持(通常默认开启)。

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:11:05