所以我有这三张桌子。订单表是现有订单的列表,而订单详细信息由订单中的项目组成(因为 1 个订单可以有多个目录)。我正在使用 mysql
Cust_order
Order_item
Inventory
我想创建一个触发器,如果订单表中的 shipping_status 为“已发货”,那么它将更新库存中的库存。
我已经创建了这个触发器
create trigger update_inventory after update on cust_order for each row begin if new.shipping_status="Shipped" then update inventory set inStock = inStock - (select quantity from order_item where order_id=new.order_id) where catalog_id in (select catalog_id from order_item where order_id=new.order_id); end if; end; //
但它不起作用并转为 #1242 - 子查询返回超过 1 行
如何创建一次更新多行的触发器?
CREATE TRIGGER update_inventory AFTER UPDATE ON cust_order FOR EACH ROW UPDATE inventory JOIN order_item USING (catalog_id) SET inventory.quantityInStock = inventory.quantityInStock - order_item.quantity WHERE cust_order.order_id = NEW.order_id AND NEW.shipping_status = 'Shipped';
查询需要order_item (order_id, catalog_id)在表结构中定义为 UNIQUE。如果没有,那么您必须使用聚合子查询而不是JOIN order_item.
order_item (order_id, catalog_id)
JOIN order_item