如何修复在MySQL 8.2中两次指定表的问题?

时间:2019-01-23 14:06:16

标签: mysql sql

这是我的查询:

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中数据的单独来源

任何想法我该如何解决?

2 个答案:

答案 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的世界,我建议您使用临时表或表变量,这样就可以将一些东西存储在键,更新值的概念中,一旦填充,就可以使用它在更新查询中将值设置为更新后的值。