我是SQL的新手,更具体地说是使用MySQL Workbench。
我创建了一个包含两个表Grades和GPAList的数据库。
我想获取成绩中每个条目的平均值(按学生ID分组[sid是列的名称])一旦我有了这些平均值,就将它们与相应的学生一起存储在GPAList表中。这是为了在每次将新条目添加到Grades时触发。
这是我创建的触发器:
CREATE DEFINER = CURRENT_USER TRIGGER `ProjectName`.`Grades_AFTER_UPDATE_1` AFTER UPDATE ON `Grades` FOR EACH ROW
BEGIN
SELECT sid, SUM ( CASE grade
when 'A' then 4.0
when 'B' then 3.5
when 'C' then 3.0
when 'D' then 2.5
when 'F' then 1.0
else 0
end
) / COUNT(*) Grades
INTO GPAList
FROM Grades
GROUP BY sid;
END
我遇到的错误是:
Error 1064: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '' at
line 1 SQL Statement: CREATE DEFINER = CURRENT_USER TRIGGER
`ProjectName`.`Grades_AFTER_UPDATE_1` AFTER UPDATE ON `Grades` FOR EACH ROW
FOLLOWS `Grades_AFTER_UPDATE`
当我在工作台中编写此代码时,不会显示语法错误。当我尝试应用此触发器时,我的代码将转换为:
DROP TRIGGER IF EXISTS `ProjectName`.`Grades_AFTER_UPDATE_1`;
DELIMITER $$
USE `ProjectName`$$
CREATE DEFINER = CURRENT_USER TRIGGER `ProjectName`.`Grades_AFTER_UPDATE_1` AFTER UPDATE ON `Grades` FOR EACH ROW FOLLOWS `Grades_AFTER_UPDATE`
$$
DELIMITER ;
仅在再次单击“应用”后才能看到上面列出的1064错误。是否有一些我想念的简单修复?
Grades_AFTER_UPDATE_1正在关注Grades_AFTER_UPDATE,因此不应该出现问题。
答案 0 :(得分:0)
我不确定为什么你想在单个插入后存储所有平均值,但正确的插入逻辑是这样的:
INSERT INTO GPALIST(sid, grades)
SELECT sid,
AVG (CASE grade
when 'A' then 4.0
when 'B' then 3.5
when 'C' then 3.0
when 'D' then 2.5
when 'F' then 1.0
else 0
end) as Grades
FROM Grades
GROUP BY sid;
我怀疑触发器会想要在途中某处访问new.
。