这是我的查询:
UPDATE order_product
SET amount = coalesce(
(
SELECT amount_origin + (SELECT sum(amount_to_change)
FROM order_product_edits
WHERE order_product_id = NEW.order_product_id
)
FROM order_product
WHERE id = NEW.order_product_id
)
, 0)
它在我的本地计算机(MySQL 8.3)上运行良好。.但是在服务器(MySQL 8.2)上抛出此错误:
表被指定两次,既作为'UPDATE'的目标,又作为mysql中数据的单独来源
任何想法我该如何解决?
答案 0 :(得分:1)
问题是嵌套的相关子句。我认为您不需要它:
UPDATE order_product op
SET amount = COALESCE(op.amount_origin + (SELECT sum(ope.amount_to_change)
FROM order_product_edits ope
WHERE ope.order_product_id = op.order_product_id
), 0
)
WHERE op.id = NEW.order_product_id;
我很惊讶默认值为0
而不是op.amount_origin
。
答案 1 :(得分:0)
来自T-sql的世界,我建议您使用临时表或表变量,这样就可以将一些东西存储在键,更新值的概念中,一旦填充,就可以使用它在更新查询中将值设置为更新后的值。