Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 触发器工作不正常_Mysql_Sql_Triggers - Fatal编程技术网

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;