如何修复MySQL中SELECT语句的语法错误
获取以第8行的SELECT语句开头的语法错误。不知道为什么。有什么想法吗?请参见错误开始处代码中的注释 我认为这可能与第二次引用登录名l有关,但当我尝试将其更改为登录名o时,仍然出现相同的错误如何修复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
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语句。除了使用不正确的注释字符来指示错误位置之外,代码没有任何问题