Mysql 触发器工作不正常
我在一个名为更新、插入、删除的触发器中使用以下代码位。 问题是,当触发器运行时,它会将发票表中的所有余额合计更新为相同的……它应该根据对应的发票行合计更新每个发票合计,而不是将它们更新为相同的。这件事我已经纠结了好几个小时了,就是想不起来Mysql 触发器工作不正常,mysql,sql,triggers,Mysql,Sql,Triggers,我在一个名为更新、插入、删除的触发器中使用以下代码位。 问题是,当触发器运行时,它会将发票表中的所有余额合计更新为相同的……它应该根据对应的发票行合计更新每个发票合计,而不是将它们更新为相同的。这件事我已经纠结了好几个小时了,就是想不起来 UPDATE invoices SET invoices.Amount = (SELECT SUM(invoicelines.Amount) AS expr1 FROM invoicelines i INNER JOIN invoicelines ON i.I
UPDATE invoices
SET invoices.Amount = (SELECT
SUM(invoicelines.Amount) AS expr1
FROM invoicelines i
INNER JOIN invoicelines
ON i.Id = i.Id
WHERE i.InvoiceId = i.InvoiceId
GROUP BY i.InvoiceId)
WHERE Id = Id;
您应该使用带有以下内容的外部WHERE子句:
WHERE id = NEW.id;
否则,您将更新表中的每条记录,因为每条记录都将返回true,即它们的ID等于它们的ID
此外,如果要将发票行金额删除或添加到发票金额中,则工作量太大
您只需执行以下操作:
插入
更新内容:
删除:
@user2917229发票行表有金额列吗?谢谢你,伙计,你是明星!成功了@用户2917229。很高兴它做到了。别忘了把答案标为已接受。请查看有关如何执行此操作的帮助。根据您先前的回答,这一个如何?更新客户设置余额=余额-从付款p中选择SUMAmount,其中p.CustomerId=p.CustomerId,其中Id=Id;你必须在你的内部查询中有一些独特的东西,比如。。。其中p.CustomerId=NEW.CustomerId,其中Id=NEW.CustomerId;。
UPDATE invoices
SET Amount = Amount + NEW.amount
WHERE id = NEW.InvoiceId;
UPDATE invoices
SET Amount = Amount + NEW.amount - OLD.amount
WHERE id = NEW.InvoiceId;
UPDATE invoices
SET Amount = Amount - OLD.amount
WHERE id = OLD.InvoiceId;