让我们说我有4张桌子
要求是:
如果供应商接受订单,则在orders_suppliers表中,order_supplier_status_id更改为3.
如果与特定组合订单关联的所有套利者接受了他们的订单,则在Combined_orders表中 Combined_order_status_id更改为3。
如果至少有一个供应商接受了订单并且所有订单都不被接受,则表格中的结果为:Combined_orders Combined_order_status_id更改为2。
我的问题是:只有当所有供应商都接受了订单时,才能在一个查询中将Combined_order_status_id更新为已接受?
类似:
update Combined_orders
set Combined_orders.Combined_order_status_id = 3 if(all orders_suppliers.order_supplier_status_id == 3 )
otherwise
set Combined_orders.Combined_order_status_id = 2
where orders_suppliers.Combined_order_id = Combined_orders.Combined_order_id
每次供应商接受订单时,我都想执行此查询。
目前我还没有找到一种方法只在一个查询中执行此操作。对我来说,在一个查询中执行此操作非常重要,因为根据我的理解,如果在一个查询中进行,那将是一个原子操作。
答案 0 :(得分:2)
您可以使用join
和汇总:
update Combined_orders co join
(select os.combined_order_id, min(os.order_supplier_status_id) as min_ossi,
max(os.order_supplier_status_id) as max_ossi
from orders_suppliers os
group by os.combined_order_id
) os
on os.combined_order_id = co.combined_order_id
set co.Combined_order_status_id = (case when min_ossi = max_ossi and min_ossi = 3 then 3 else 2 end);