一尘不染

一次触发多行

mysql

所以我有这三张桌子。订单表是现有订单的列表,而订单详细信息由订单中的项目组成(因为 1 个订单可以有多个目录)。我正在使用 mysql

Cust_order

Order_id Name Email Shipping_Status
1 Bryan bryan@gmail.com Shiped

Order_item

Od_id Order_id Catalog_id Quantity
1. 1 1 5
2. 1 2 5

Inventory

Catalog_id quantityInStock
1 10
2 10

我想创建一个触发器,如果订单表中的 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 行

如何创建一次更新多行的触发器?


阅读 62

收藏
2022-10-10

共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.

2022-10-10