mysql - 如何在 SELECT 语句中修复 MySQL 中的语法错误
问题描述
从第 8 行的 SELECT 语句开始出现语法错误。不知道为什么。有任何想法吗?请参阅错误开始的代码中的注释。
我认为这可能与第二次引用 Login la 有关,但是当我尝试将其更改为 Login 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
,但我也建议简化日期算术,以便它对索引更友好并限定所有列名:
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 ;
请注意,问号是为了让您包含适当的表别名。限定所有列名。
推荐阅读
- php - Joomla 模块 – 如何将表单数据发送到 helper.php 中的函数
- javascript - 在 Firefox 中调度新的 MouseEvent 时支持鼠标快捷方式
- python - 在单独的列中获取 Aspect-Based-Sentiment-Analysis 的输出
- r - AUC 函数中的初始化向量超出范围
- sql - BigQuery:“IN”运算符内列表长度的限制?
- c# - Unity 无法使用开始时生成的对象进行地面检查
- javascript - 为 react、redux 和 API 添加条件
- python - 是否有python方式/指令使函数仅在while循环的第一次迭代中执行?
- html - 从站点地图中的其他页面内容索引主网站页面?
- javascript - 用玩笑测试自调用函数