Mysql обновление таблицы с объединением, групповым и с caluse - PullRequest
0 голосов
/ 08 ноября 2019

У меня проблема с обновленной объединенной таблицей. Я успешно выбрал ожидаемый результат, но всегда получаю сообщение об ошибке при попытке обновить.

Выбрать запрос

select sale_id, price,cONVERT(sum(price) , decimal(10,2)) as average, s.total from sale_items i
JOIN sales s ON s.id = i.sale_id
where s.currency = 'USD' 
and s.currency_total != 0 
and s.`deleted_at` is null
and i.`deleted_at` is null
group by s.id
having s.total <> average;  

Обновить запрос, который я пытался

    UPDATE sale_items i
JOIN sales s ON s.id = i.sale_id

SET i.price=(i.price / (s.total/s.currency_total)), i.total=(i.total / (s.total/s.currency_total)), i.total_tax=(i.total_tax / (s.total/s.currency_total))
where s.currency = 'USD' 
and s.currency_total != 0 
and s.`deleted_at` is null
and i.`deleted_at` is null
group by s.id
having s.total <> average;

Ошибка: синтаксис для использования рядом с 'group by s.id, имеющим s.total <> средний'

1 Ответ

0 голосов
/ 08 ноября 2019

В 5.6, на странице справочника для ОБНОВЛЕНИЕ , у многотабличных обновлений есть ограничения, в том числе нет ORDER BY

average существует только в вашем запросе SELECT, это неНе определено в запросе на обновление.

Вам нужно будет включить подзапрос, расширяющий ваше местоположение, например:

UPDATE sale_items i
JOIN sales s ON s.id = i.sale_id
SET i.price=(i.price / (s.total/s.currency_total)), i.total=(i.total / (s.total/s.currency_total)), i.total_tax=(i.total_tax / (s.total/s.currency_total))
where s.currency = 'USD' 
and s.currency_total != 0 
and s.`deleted_at` is null
and i.`deleted_at` is null
and s.total <> (select sum(price) from sale_items WHERE sale_id = s.id AND ...)`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...