失败的 sql 导入 getting1064 错误 mysql 8

问题描述 投票:0回答:1
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 mysql-error-1064 mysqlimport
1个回答
0
投票

因为 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;
© www.soinside.com 2019 - 2024. All rights reserved.