Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复MySQL 8.2中两次指定的表?_Mysql_Sql - Fatal编程技术网

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

如何修复MySQL 8.2中两次指定的表?,mysql,sql,Mysql,Sql,我的问题是: UPDATE order_product SET amount = coalesce( ( SELECT amount_origin + (SELECT sum(amount_to_change) FROM order_product_edits

我的问题是:

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


知道如何修复它吗?

来自T-sql世界,我建议您使用一个临时表或表变量,这样您就可以在key、updated value的思想中存储一些内容,一旦填充了这些内容,您就可以在更新查询中使用它们将值设置为更新值

问题在于嵌套的correlation子句。我想你不需要它:

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\u origin

Duplicate?可能重复“它在我的本地计算机(MySQL 10.3)上运行良好…但它在服务器(MySQL 10.2)上抛出此错误:”MySQL 10?MySQL的最大版本是8!你在这里可能是指MariaDB 10。@RaymondNijland Oh我是说
8.2
8.3
你在使用触发代码吗?
新建。
语法表明您正在使用触发器。。如果是,则发布完整的触发代码。。如果不是,你的语法是完全错误的,然后我建议你阅读