[英]query syntax issue upgrading to mysql 8 from 5.7
我有此sql查询,可在mysql服务器5.7中使用,但升级到8.0.12版后将无法使用
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行)
每次我尝试运行它
我试图修复我遇到的一些语法错误,从而浏览了您的代码。 不知道它能否使它工作,但这至少是一个开始。
您还应该格式化/缩进代码,以使其更易于阅读。 由于控制台会在格式正确的示例中准确告诉您问题所在的哪行,这也将使调试更加容易。
SELECT
m.sID,
m.FNames,
m.total,
m.grade,
m.h_score,
m.l_score,
m.stud_per_sub,
m.`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
@sid := k.subj_TeacherID
AND @sess := k.session
AND @cid := k.classID
AND @trm := k.term
AND @subject := k.subid
ORDER BY k.total desc
) AS m;
我至少没有得到任何使用此语法错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.