***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。
请帮助谢谢。
答案 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查询也只会更新一次。