如何修复MySQL中SELECT语句的语法错误

如何修复MySQL中SELECT语句的语法错误,mysql,sql,Mysql,Sql,获取以第8行的SELECT语句开头的语法错误。不知道为什么。有什么想法吗?请参见错误开始处代码中的注释 我认为这可能与第二次引用登录名l有关,但当我尝试将其更改为登录名o时,仍然出现相同的错误 CREATE PROCEDURE setAttendance(IN _sectionid integer, IN _studentid integer, IN _logindate datetime, IN _result integer) BEGIN UPDATE Login l INNER

获取以第8行的SELECT语句开头的语法错误。不知道为什么。有什么想法吗?请参见错误开始处代码中的注释

我认为这可能与第二次引用登录名l有关,但当我尝试将其更改为登录名o时,仍然出现相同的错误

    CREATE PROCEDURE setAttendance(IN _sectionid integer, IN _studentid integer, IN _logindate datetime, IN _result integer)

BEGIN

UPDATE Login l
INNER JOIN Roll r ON l.rollid = r.tid
SET result = _result
WHERE
r.sectionid = _sectionid AND r.studentid = _studentid 
AND DATE(logindate) = DATE(_logindate);

//error starts here and ends on line after it
SELECT tid FROM Login l
INNER JOIN Roll r ON l.rollid = r.tid
WHERE
r.sectionid = _sectionid AND r.studentid = _studentid 
AND DATE(logindate) = DATE(_logindate);

我只想在没有语法错误的情况下运行此操作

此问题通常是由于缺少分隔符造成的,但我还建议简化日期算法,使其更便于索引并限定所有列名:

DELIMITER $$

CREATE PROCEDURE setAttendance (
    IN _sectionid integer,
    IN _studentid integer,
    IN _logindate datetime,
    IN _result integer
)
BEGIN

    UPDATE Login l INNER JOIN
           Roll r
           ON l.rollid = r.tid
        SET result = _result
    WHERE r.sectionid = _sectionid AND 
          r.studentid = _studentid AND
          ?.logindate >= DATE(_logindate) AND   -- the ? is for the table alias
          ?.logindate < DATE(_logindate) + INTERVAL 1 DAY;


    //error starts here and ends on line after it

    SELECT r.tid    -- table alias
    FROM Login l INNER JOIN 
         Roll r
         ON l.rollid = r.tid
    WHERE r.sectionid = _sectionid AND
          r.studentid = _studentid AND
          ?.logindate >= DATE(_logindate) AND   -- the ? is for the table alias
          ?.logindate < DATE(_logindate) + INTERVAL 1 DAY;
END; $$

DELIMITER ;

请注意,问号用于包含适当的表别名。限定所有列名。

此问题通常是由于缺少分隔符语句造成的。很抱歉,我没有在此处显示DELIMETER语句,因为我认为这是不必要的,但我的实际代码中确实包含了DELIMETER语句。除了使用不正确的注释字符来指示错误位置之外,代码没有任何问题