MySQL запрос UPDATE с JOIN обновляет только одну строку

Есть таблица с такой структурой:

create table orders(id int not null auto_increment primary key, payment varchar(64), type varchar(64), order_status varchar(64), amount float);
insert into orders(type, order_status, amount) values(2, 1, 50),(2, 1, 50),(5, 1, 50),(5, 1, 50),(5, 1, 50),(5, 1, 50),(5, 1, 50);

И есть вот такой запрос:

UPDATE 
  orders AS o 
  JOIN (
    SELECT 
      id, 
      payment, 
      type, 
      order_status, 
      amount, 
      @total := SUM(amount) 
    FROM 
      orders 
    WHERE 
      type = 5 
      AND order_status BETWEEN 1 AND 2 FOR UPDATE 
      ) AS n ON o.id = n.id 
SET 
  o.payment = 3

Суть запроса в том, чтобы он обновлял все значения колонки payment, которые попадают под условия в JOIN SELECT, а также выдавал значение переменной @total, в которой содержится сумма колонки amount в строках, также попадающих под условие в JOIN SELECT. В итоге, с таким запросом сумма в переменную @total попадает корректная, однако UPDATE обновляет только первую строку, попадающую под условия, а остальные нет. Но если убрать из запроса @total := SUM(amount), то все обновляется как нужно. Подскажите, что я делаю не так? Как @total := SUM(amount) влияет на UPDATE и как нужно сделать, чтобы все работало правильно?

Этот пример на dbfiddle: https://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=c3a2ee25c6f4d4be3aca7508b6829321


Ответы (0 шт):