gpt4 book ai didi

Mysql:更新触发器错误:操作数应包含 1 列

转载 作者:行者123 更新时间:2023-11-30 21:28:00 24 4
gpt4 key购买 nike

我在每次更新时都创建了一个触发器。因此,每当来自“ABC”类的学生更新为更新后的“A”级时,就必须执行以下嵌套的 case 语句。我正在 Phpmyadmin 上编写这段代码。 table1 中的 current_status 应更新为从 start_date 到 End_date 的值

每当 xyz 表更新了 start_date 和 end_datetable1 应该这样执行:

开始日期当前状态

1/1/2019 好

2/1/2019 中度

3/1/2019 好

4/1/2019 好

5/1/2019 中等当我运行它时,它不会显示任何错误,但是当我更新表格时,出现以下错误

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 列

最佳答案

如评论所述,您将遇到 MySQL 对更新触发器的限制,即您无法更新触发器主体中的同一个表。您可以将 After 触发器更改为 Before 触发器

DELIMITER $$
CREATE DEFINER=`xyz`@`localhost` TRIGGER `studentgrades`
BEFORE UPDATE ON `table1`
FOR EACH ROW
BEGIN
SET NEW.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;
END
$$

关于Mysql:更新触发器错误:操作数应包含 1 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57908855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com