我的SQL查询在MySQL 8.0.35中语法报错,如何修复兼容?
问题解决:MySQL 8.0兼容的SQL修改
原查询在MySQL 8.0报错的核心原因是**FROM子句里多了一层冗余的嵌套括号**——MySQL 8.0对这种无意义的语法嵌套检查更严格,而MariaDB的语法校验相对宽松,所以能正常执行。
修改方法非常直接,只需去掉包裹临时表tmptbl的外层括号即可:
修改后的完整SQL:
SELECT customer.Id, customer.FirstName, customer.LastName, SUM(PeriodHours) AS SUMPeriodHours, PeriodDay FROM ( SELECT CustomerId, (UNIX_TIMESTAMP(taskinterval.EndDateUtc) - UNIX_TIMESTAMP(taskinterval.StartDateUtc)) / 3600 AS PeriodHours, date(taskinterval.StartDateUtc) as PeriodDay FROM taskinterval WHERE StartDateUtc > @STARTDATE and StartDateUtc < @ENDDATE ) AS tmptbl INNER JOIN customer on customer.Id = tmptbl.CustomerId GROUP BY PeriodDay, customer.Id, customer.FirstName, customer.LastName
对比原查询,仅移除了FROM后面的第一层括号(原本的FROM ((SELECT ...) AS tmptbl )变为FROM (SELECT ...) AS tmptbl),其余业务逻辑完全保留,修改后可同时兼容MySQL 8.0和MariaDB环境。
内容的提问来源于stack exchange,提问作者Ivan P.
相关产品推荐
相关产品推荐

