首页 > 解决方案 > 从 5.7 升级到 mysql 8 的查询语法问题

问题描述

我有这个在 mysql server 5.7 中工作但升级到版本 8.0.12 后无法工作的 sql 查询

SELECT sID, FNames, total, grade, h_score, l_score, stud_per_sub, RANK FROM 
(SELECT k.sID, concat(s.surName,'  ', s.firstName,'  ', s.oNames) AS 
'FNames', k.total, k.h_score, k.stud_per_sub, k.l_score, k.grade, @curRank 
:= if(@prevRank = k.total, @curRank, @incRank) AS rank, @incRank := @incRank 
+ 1, @prevRank := k.total FROM terminal_assessment k LEFT JOIN student s ON 
(s.studentID = k.sID), (SELECT @curRank := 0, @prevRank := null, @incRank := 
1) r WHERE k.subj_TeacherID=:sid AND k.session=:sess AND k.classID=:cid AND 
k.term=:trm AND k.subid=:subject ORDER BY k.total desc) AS m;

它给出了这个错误信息

(错误代码:1064。您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 'from [select k.sID, concat(s.surName,' ', s .firstName,' ', s.oNames) A​​S 'FName' 在第 1 行)

每次我尝试运行它

标签: mysql

解决方案


RANK 是从 MYSQL 8.0.2(您升级到的版本)开始的保留字。这就是您收到错误的原因。

要解决它很简单,只需在 RANK 周围添加反引号 `。

您可以在此处找到更多详细信息在 尝试阅读 mysql 错误消息时,您应该始终查看消息开始点之前的内容


推荐阅读