Как исправить Таблица указана дважды в MySQL 8.2? - PullRequest
0 голосов
/ 23 января 2019

Вот мой запрос:

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

Есть идеи, как это исправить?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Проблема заключается во вложенном предложении корреляции. Я думаю, вам это не нужно:

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.

0 голосов
/ 23 января 2019

Исходя из мира T-sql, я бы посоветовал вам использовать временную таблицу или переменную таблицы, чтобы вы могли хранить что-то в представлении о ключе, обновленном значении, и после того, как вы его заполнили, вы можете использовать это в вашем запросе на обновление, чтобы установить значения для обновленных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...