#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 не гарантирует порядок вычисления выражений.
Однако это был не тот вопрос, который вы задавали. Если вы хотите, чтобы запрос был исправлен, задайте новый вопрос с примерами данных и желаемыми результатами.