MySQL Workbench执行SQL报1064错误无法定位语法问题求助
MySQL 1064错误排查结果
错误根因
触发1064语法错误的核心原因是子查询的别名使用了单引号包裹:MySQL语法规范中,单引号仅用于标识字符串值,标识符(表别名、列别名、表名等)要么不使用引号,要么使用反引号()包裹,不能直接用单引号定义别名。 另外有可选优化点:外层查询的常量字段'Total Invoice'`建议增加别名,避免返回结果列名异常。
修正后的完整代码
use sql_invoicing; select 'Total Invoice' as summary_type, sum(invoice_total) as 'Total Sales', sum(payment_total) as 'Total Payment' from ( select i.number as 'Invoice number', i.client_id, c.name, i.invoice_total, i.payment_total as 'Total Payments', pm.name from invoices i left join clients c on i.client_id = c.client_id left join payments p on i.invoice_id = p.invoice_id left join payment_methods pm on p.payment_method = pm.payment_method_id where pm.name is not null order by client_id desc ) as R -- 别名去掉单引号即可,也可以写成 `R` 格式
补充说明
- 若需要给包含空格、特殊字符的标识符命名,统一使用反引号包裹,例如
as 'Total Sales'可改成asTotal Sales``,单引号用于列别名虽然低版本MySQL可能兼容,但不符合标准规范,容易引发其他语法问题 - 子查询内部的
order by在没有limit的场景下无意义,外层聚合查询不会保留子查询的排序结果,可直接删除该语句减少不必要的性能消耗。
内容的提问来源于stack exchange,提问作者New developer
相关产品推荐
相关产品推荐

