我有以下产品表
id | companyID | prodID | price | stock | stockAvailable | sumStock
1 A 2 10 5 4
2 B 2 50 10 5
当我更新将更新sumStock的产品行时,我需要触发。
我是Triggers的新手,我的尝试失败了:
CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
ON SalesDB.Product FOR EACH ROW
BEGIN
SET Product.sumStock = Product.stock + Product.stockAvailable
END
我的目标是在这种情况下计算SUM(股票)AS stockSum,其中ProductID = 2 在这种情况下,这将是15,然后将其添加到sumStock。然后将stockAvailable列添加到该列。所以在sumStock中我会有24个。
结果将是:
id | companyID | prodID | price | stock | stockAvailable | sumStock
1 A 2 10 5 4 29
2 B 2 50 10 5 29
答案 0 :(得分:2)
试试这个语法:
CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
ON SalesDB.Product FOR EACH ROW
BEGIN
SET NEW.sumStock = NEW.stock + NEW.stockAvailable
END;
在表格的一行中添加。
要获得总数,您可以使用以下内容:
CREATE TRIGGER `SalesDB`.`stockSumUpdate` BEFORE UPDATE
ON SalesDB.Product FOR EACH ROW
BEGIN
SET NEW.sumStock = (select sum(stock + stockAvailable)
from products where p.prodid = new.prodid and p.id <> id
) + NEW.stock + NEW.stockAvailable;
END;
除此之外,这仍然没有做你想要的。如果您一次更新多行,您将获得不同的总库存值。
换句话说,只要更新单行,就会尝试更新一组行。天哪,当这样说时,它似乎不是一个好主意。第二组udpates甚至可以更新更多行等等(因为产品不会发生)。
而是创建一个表,其中产品作为主键,并且该表中可用的库存(可能是现有表)。每次此表发生更改时,请更新摘要表。