mysql - 从 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) AS 'FName' 在第 1 行)
每次我尝试运行它
解决方案
RANK 是从 MYSQL 8.0.2(您升级到的版本)开始的保留字。这就是您收到错误的原因。
要解决它很简单,只需在 RANK 周围添加反引号 `。
您可以在此处找到更多详细信息在 尝试阅读 mysql 错误消息时,您应该始终查看消息开始点之前的内容
推荐阅读
- java - 如何将枚举变量保存到数据库(而不是枚举值本身)
- ios - UITableViewCell 不会更新它的高度以适应自定义 UIControl 高度
- react-native - React Native Image 组件不释放内存
- r - R 神经包:无法运行 mlp 示例?
- typo3 - TYPO3 EXT:form TypoScript 在所有表单中通过其标识符覆盖字段
- pandas - 如何使用 python 在数据框中选择包含某些特定值的行?
- libgdx - 尽管在 libgdx 项目中未调用该方法,但如何使用该方法
- sql - 返回不在前两个列表中的元素列表
- sql - Oracle SQL if 语句基于通过 .sh 脚本传入的参数
- php - 你能告诉我这个表格在做什么吗?