【发布时间】:2020-01-14 10:59:28
【问题描述】:
我在每次更新时都创建了一个触发器。因此,每当来自“ABC”类的学生使用更新后的“A”级进行更新时,就必须执行以下嵌套的案例语句。我正在 Phpmyadmin 上编写此代码。 table1 中的 current_status 应该使用从 start_date 到 End_date 的值进行更新
每当 xyz 表使用 start_date 和 end_date 更新时 table1 应该这样执行:
开始日期当前状态
1/1/2019 好
2/1/2019 中等
2019 年 3 月 1 日好
2019 年 4 月 1 日好
2019 年 5 月 1 日 中等 当我运行它时,它不会显示任何错误,但是当我更新表时,我收到以下错误
CREATE DEFINER=`xyz`@`localhost` TRIGGER `studentgrades`
AFTER UPDATE ON `table1`
FOR EACH ROW
update db.table1 h
SET
current_status =
(
CASE
when date(new.start_date) <= date(new.end_date) THEN
CASE
WHEN new.student_class = 'ABC' and new.updated_grade='A'
THEN
CASE
WHEN statement 1 THEN 'Very Good'
When statement 2 THEN 'Good'
ELSE 'Moderate'
END
ELSE 'Moderate'
END
ELSE 'moderate'
END ,
date(new.start_date) =date_add(date(new.start_date) , INTERVAL 1 DAY)
) where h.start_date = date(new.start_date);
MySQL 说:
1241 - 操作数应包含 1 列
【问题讨论】:
-
你的括号是不是有问题?看起来你在做
current_status = ( 'moderate', date(new.start_date) =date_add(date(new.start_date) , INTERVAL 1 DAY) )。我认为您可以将它们全部删除:current_status = CASE .... END , date ... -
一旦你解决了语法问题,你就会遇到 MySQL 的限制......在更新触发器中,不可能对表中引用的表执行更新导致触发器被触发的语句...假设表(不幸命名)
table1在数据库中(不幸命名)db1。此外,不可能为函数的结果赋值,即DATE(NEW.start_date)。我们可以在BEFORE INSERT或BEFORE UPDATE触发器的上下文中为 NEW.start_date 赋值,但不能在 UPDATE 语句中。 -
@Pepper 如果我删除括号,它会显示语法错误
-
@spencer7593 当我使用 when date(new.start_date) 时,它开始显示错误。之前没有这个语句,它成功更新了表格
-
我指的不是 WHEN 子句中的条件...我指的是
SET子句中的赋值,倒数第二行,一旦错位括号的问题是更正。如果此触发器在db1.table1上,则无法在触发器内对db1.table1执行UPDATE。
标签: mysql triggers phpmyadmin eventtrigger