如何执行此MySQL触发操作?

时间:2019-01-18 16:46:36

标签: mysql

***OrdersTable***
ID    OrderNumber    CustomerId    Status
1     123456         1             0

***PurchasedProductsTable***
OrderId     itemSku     Qty
1           1000001     5
2           1000002     3

***TrackInventoriesTable***
CustomerId      ItemSku      OrderedQty
1               1000001      5
1               1000002      3

当客户取消订单(id 1)时,订单表中的状态更新为1。更新为状态1时,应运行触发器(状态更新为2或3时不运行)。检索该订单的所有项目从购买的产品表(此处为ID 1和2)中获取。在购买的产品表中的每个项目上运行并循环,并从trackinventories表的itemQty列中扣除该项目的数量(如果采购产品中的itemSku与订单表中的customerId完全匹配)。

该客户的两个Item sku(此处为1000001 1000002)的orderedQty(在trackInventories表中)的预期输出应为0。

请帮助谢谢。

1 个答案:

答案 0 :(得分:0)

OrdersTable上UPDATE触发器的主体应如下所示:

IF NEW.Status = 1 
   AND OLD.Status <> 1 --Edit: Updates on other fields should not adjust quantities
BEGIN
    UPDATE TrackInventoriesTable AS ti 
    INNER JOIN PurchasedProductsTable AS pp ON ti.ItemSku = pp.ItemSku
    SET ti.OrderedQty = ti.OrderedQty - pp.Qty
    WHERE ti.CustomerId = NEW.CustomerId AND pp.OrderId = NEW.ID
    ;
END

但是,如果单个订单可以为同一个sku包含多个条目,那么这可能行不通。如果我没记错的话,即使联接表明需要多次更新,MySQL UPDATE查询也只会更新一次。