使用公共表表达式(CTE)时出现1064语法错误,无CTE可正常执行
问题解决方案
可能的原因及修复方法
1. MySQL版本不支持CTE
MySQL 8.0及以上版本才支持WITH子句定义CTE(公共表表达式),如果你的MySQL版本低于8.0,执行这条语句必然会报1064语法错误。
- 修复方法:
- 升级MySQL到8.0及以上版本;
- 或者把CTE改写为子查询:
SELECT * FROM ( SELECT * FROM student_table_name WHERE student_id=6639352 ORDER BY modified DESC ) AS a
2. CTE内部ORDER BY未搭配LIMIT(针对8.0+版本)
即使是MySQL 8.0+版本,CTE内部的ORDER BY如果没有配合LIMIT使用,数据库会认为这个排序是无意义的(因为CTE返回的结果集本身是无序的),部分场景下会触发语法或逻辑警告,甚至报错。
- 修复方法:
- 如果确实需要在CTE内排序,加上
LIMIT(数值根据实际数据量调整):WITH a AS ( SELECT * FROM student_table_name WHERE student_id=6639352 ORDER BY modified DESC LIMIT 1000000 ) SELECT * FROM a - 或者把
ORDER BY移到最终查询语句中:WITH a AS ( SELECT * FROM student_table_name WHERE student_id=6639352 ) SELECT * FROM a ORDER BY modified DESC
- 如果确实需要在CTE内排序,加上
内容的提问来源于stack exchange,提问作者jessefournier
相关产品推荐
相关产品推荐

