首页 > 解决方案 > 如何修复表在 MySQL 8.2 中指定了两次?

问题描述

这是我的查询:

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):

表被指定了两次,既作为“更新”的目标,又作为 mysql 中数据的单独源

知道如何解决吗?

标签: mysqlsql

解决方案


问题是嵌套的相关子句。我认为你不需要它:

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.


推荐阅读