CREATE PROCEDURE `getTestById`(IN `studID` INT,IN `tID` INT)
BEGIN
SELECT t.id,t.name,c.name category,i.name instructor,getQuestionsInTest(t.id) questions,ts.startTime,ts.duration,ts.passPercent,ts.endTime,ts.id settingID,ts.random from groups g
inner join groups_has_students gs on gs.studentID = studID and g.id = gs.groupID
inner join test t on t.id = g.assignedTest
inner join test_settings ts on ts.id = g.settingID
inner join category c on c.id = t.categoryID
inner join instructor i on i.id = t.instructorID
where (convert_tz(now(),@@session.time_zone,'+02:00') BETWEEN ts.startTime AND ts.endTime) AND t.id NOT IN (SELECT testID from result where studentID = gs.studentID) AND t.id = tID;
END;
给出以下错误
MySQL 说:文档
#1064 - 你的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解要使用的正确语法 靠近'组g 内部加入 groups_has_students gs 在 gs.studentID = studID ' 在第 3 行
我试过用反引号括起来但是没用
有什么解决办法吗?
因为 MySQL 8.0.2
groups
是保留关键字。
要解决此问题,您需要将表名
groups
括在反引号 (`) 中以将其转义。
CREATE PROCEDURE `getTestById`(IN `studID` INT, IN `tID` INT)
BEGIN
SELECT t.id, t.name, c.name category, i.name instructor, getQuestionsInTest(t.id) questions, ts.startTime, ts.duration, ts.passPercent, ts.endTime, ts.id settingID, ts.random
FROM `groups` g
INNER JOIN groups_has_students gs ON gs.studentID = studID AND g.id = gs.groupID
INNER JOIN test t ON t.id = g.assignedTest
INNER JOIN test_settings ts ON ts.id = g.settingID
INNER JOIN category c ON c.id = t.categoryID
INNER JOIN instructor i ON i.id = t.instructorID
WHERE (convert_tz(now(), @@session.time_zone, '+02:00') BETWEEN ts.startTime AND ts.endTime) AND t.id NOT IN (SELECT testID FROM result WHERE studentID = gs.studentID) AND t.id = tID;
END;