错误信息 “You can’t specify target table ‘inventory_item’ for update in
FROM clause” 通常是因为你在尝试更新(UPDATE)、删除(DELETE)或者在某些数据库系统中进行 SELECT …
FOR UPDATE 操作时,直接从目标表中读取数据。这种做法在许多数据库管理系统(如
MySQL)中是不被允许的,因为这样做可能会导致不可预测的结果或者更新/删除操作与读取操作之间的数据不一致。
-- 错误的做法
UPDATE inventory_item
SET quantity = quantity - 1
WHERE id IN (
SELECT id FROM inventory_item WHERE stock_level < 10
);
解决方案:使用exists关键字实现
delete from in_order where not exists (
select 1 from in_order_item where in_order_item.inbound_id = in_order.id
)
update和delete都可以这样搞