我是SQL的新手,更具体地使用MySQL Workbench。
我创建了一个具有两个表格和GPALIST的数据库。
我想将每个成绩的每个条目的平均值(由学生ID分组[SID是列的名称])一旦我拥有这些平均值,就将它们存储在GPALIST表中,并与他们的相应学生一起存放。这旨在每次添加新的条目时触发。
这是我创建的触发器:
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 grades_after_update_1正在遵循,所以这不应该是问题。
我不确定为什么您要在单个插入后存储 all 平均值,但是正确的插入逻辑就是这样:
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.
。