带条件和计算的Mysql触发器
在插入任务表之后,我使用mysql触发器从插入贡献,我需要计算总小时数(total_hours=new.hours+new.加班),并且我需要从贡献表中选择总小时数 这是我正在使用的mysql触发器,但它不工作带条件和计算的Mysql触发器,mysql,sql,triggers,Mysql,Sql,Triggers,在插入任务表之后,我使用mysql触发器从插入贡献,我需要计算总小时数(total_hours=new.hours+new.加班),并且我需要从贡献表中选择总小时数 这是我正在使用的mysql触发器,但它不工作 CREATE TRIGGER update_hours AFTER INSERT ON tasks FOR EACH ROW BEGIN SELECT p_id d_id hours overtime total_hours FROM contr
CREATE TRIGGER update_hours AFTER INSERT ON tasks
FOR EACH ROW
BEGIN
SELECT p_id d_id hours overtime total_hours FROM contribution WHERE
p_id == new.p_id && d_id == new.d_id
new.total_hours = total_hours + new.hours + new.overtime
INSERT INTO contribution
( p_id,
d_id,
hours,
overtime,
total_hours,
contribution )
VALUES
( NEW.p_id,
NEW.d_id,
NEW.hours,
NEW.overtime,
new.total_hours,
NEW.contribution );
END IF;
END
我需要从贡献表中获取值,并将这些值添加到工时和加班中
我需要在添加任务小时数和加班时插入贡献表。需要计算总小时数(小时数+加班时间)并将其添加到贡献总小时数中 第一步是获取贡献中以前的全部条目。 第二步是添加插入到任务中的新值,并添加到总数中。 第三步是将结果插入贡献
DELIMITER |
CREATE TRIGGER update_hours AFTER INSERT ON tasks
FOR EACH ROW
BEGIN
SET @old_total_hours = (SELECT SUM(hours + overtime)
FROM contribution
WHERE p_id == new.p_id && d_id == new.d_id
GROUP BY p_id);
SET @total_hours = @old_total_hours + new.hours + new.overtime;
INSERT INTO contribution
( p_id,
d_id,
hours,
overtime,
total_hours,
contribution )
VALUES
(
NEW.p_id,
NEW.d_id,
NEW.hours,
NEW.overtime,
@total_hours,
NEW.contribution
);
END|
DELIMITER ;
使用
SET@total\u hours
而不是new.total\u hours
。注意,使用变量而不是伪列名。此外,您应该编辑问题以显示整个触发器定义,而不仅仅是它的内容。您正在创建的触发器类型可能有问题。此外,第一个select语句的列列表编写不正确-没有逗号,并且不需要列。你可以简单地在select语句中设置变量值。你能帮我纠正吗?我不记得正确的语法了,我只是写了一个伪代码,你能帮我重新写吗?我花了很多时间在这个问题上,还是想不出帮助我你能添加触发器定义的全文吗?您请求帮助,但忽略了注释中的信息请求。这里有一些语法错误1)有一个悬空as语句2)mysql中的Null safe equal is(not==)3)有一个end if,但没有IFF对于end if代码>我刚刚复制/粘贴了OPs代码,但没有看到。不管怎样,谢谢你的帮助。我已经更新了代码。嘿,现在我需要使用总小时数计算每个开发人员(d_id)在项目中的贡献(p_id)不同的问题,所以请问一个新问题。你能帮我吗?我需要在2小时内提交我的学校作业:(