Запрос обновления MySQL с использованием Select

#mysql #sql #sql-update

#mysql #sql #sql-обновление

Вопрос:

Может кто-нибудь объяснить, как написать запрос на обновление, чтобы обновить столбец «newBalance» в таблице «abcd» с помощью O / P баланса в следующем запросе?

Я хотел бы обновить столбец newBalance балансом, рассчитанным для каждой строки, используя приведенный ниже запрос.

 SELECT id
     , inAmt
     , outAmt
     , @prev := if(id = 1, @prev := @curBalance , @prev   (@prevOut-@prevIn)) as balance
     , @prevIn :=inAmt
     , @prevOut := outAmt 
  from (select @prev := 0) as i
     , abcd 
 order 
    by id
  

Любая помощь высоко ценится.

Комментарии:

1. Привет, Гордон, спасибо за ответ. Я могу получить желаемые результаты, используя приведенный выше запрос select. Но я хотел бы объединить приведенный выше запрос с запросом обновления, чтобы обновить столбец с именем «newBalance», используя значение вычисленного баланса.

Ответ №1:

Вы можете использовать update с join :

 update abcd join
       (select id, inAmt, outAmt,
               @prev := if(id = 1, @prev := @curBalance , @prev   (@prevOut-@prevIn)) as balance,
               @prevIn := inAmt,
               @prevOut := outAmt
        from (select @prev := 0) as i cross join
             abcd
        order by id
       ) x
       on abcd.id = x.id
    set abcd.newbalance = x.balance;
  

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

Однако это был не тот вопрос, который вы задавали. Если вы хотите, чтобы запрос был исправлен, задайте новый вопрос с примерами данных и желаемыми результатами.