mysql - 尝试解决 MYSQL 更新触发器的语法错误
问题描述
我正在尝试创建一个触发器以在更新Project
表时更新Assign
表,但我一直收到此错误: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'END IF
有谁知道我为什么会收到此语法错误?请注意,我是这方面的初学者,所以我的 SQL 语句可能完全错误。此外,我确信在我的 IF 语句中运行的查询是有效的,因为我已经在没有在触发器内的情况下自行运行它。
delimiter $$
CREATE TRIGGER update_trigger AFTER UPDATE ON Assign
FOR EACH ROW
BEGIN
IF OLD.projNo <> new.projNo THEN
#RUN THIS QUERY TO UPDATE MY TABLE
UPDATE Project p JOIN
(SELECT Project.projNo, COUNT(DISTINCT empid) as numEmployeeAssigned
FROM (Project LEFT JOIN Assign ON Project.projNo=Assign.projNo)
GROUP BY projNo
) as tb
ON p.projNo = tb.projNo
SET p.numEmployeeAssigned = tb.numEmployeeAssigned
#END QUERY
END IF
END$$
delimiter;
解决方案
您可以增加或减少计数:
UPDATE Project p
SET p.numEmployeeAssigned = p.numEmployeeAssigned +
(case when p.projNo = new.ProjNo then 1 else -1 end)
WHERE p.projNo IN (old.ProjNo, new.ProjNo) AND
old.ProjNo <> new.ProjNo;
推荐阅读
- neural-network - 不受句子顺序影响的文本文档的神经网络
- python - Python:如何使用日期从父页面获取 URL?
- java - 防止反馈循环/Catch22 Java 递归
- shell - bash/zsh - rc 文件中带有文件参数的当前目录(点 `.`)命令
- java - 我需要关于下一次递归的解释(我是初学者)
- azure - 资源“00000003-0000-0000-c000-000000000000”上不存在的“EduRoster.Read.All”
- r - 如何使用ggplot 2将一个变量绘制为条形图
- wordpress - 如何为路由添加异常路由 - laravel
- swift - 递归查找树中节点的父节点
- javascript - 没有任何安装,我可以将 Service Worker 用作更持久的 Web Worker 吗?