mysql - Mysql:更新触发器错误:操作数应包含 1 列
问题描述
我在每次更新时创建了一个触发器。因此,每当来自“ABC”类的学生使用更新后的“A”级进行更新时,就必须执行以下嵌套的案例语句。我正在 Phpmyadmin 上编写此代码。table1 中的 current_status 应该使用从 start_date 到 End_date 的值进行更新
每当使用 start_date 和 end_date table1 更新 xyz 表时,应该像这样执行:
开始日期当前状态
2019 年 1 月 1 日 好
2019 年 2 月 1 日 中等
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 列
解决方案
正如评论中提到的,您将遇到 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
$$
推荐阅读
- python - 理解如何将中值滤波器算法实现应用于 Python 的问题
- javascript - 我的列表的 CSS 样式不起作用,但它正在处理其他所有内容
- javascript - 我希望通过单击来执行该功能,但它是通过双击来执行的
- wordpress - 来自posts_pre_query的分页结果 - Wordpress
- python - Python Lambda 函数和 ffmpeg 命令以及从 jpg 到 ts 文件的标准输出
- typescript - 根据具有可选属性的类型从对象中提取实际类型
- python - 使用 OpenCV 为单个帧创建时间戳
- python - Selenium 在使用 driver.get() 时引发“webDriverException: chrome not reachable”
- r - 需要使用 GREP 的 R 代码从包含特殊字符的字符串中提取数字
- node.js - Heroku 错误:无法在视图目录“/views”中查找视图“home”