Использование псевдонима не решает проблему невозможности указать таблицу, которая обновляется в SELECT
в правой части выражения. Одним из способов решения этой проблемы является использование нескольких таблиц UPDATE
:
UPDATE accounts t1
CROSS JOIN (SELECT SUM(Credit)-SUM(Debit) AS `change`
FROM accounts
WHERE Account_Id=1) t2
SET t1.Account_Balance = t1.Account_Balance + t2.change
Примечание. Я не уверен, что расположение WHERE Account_Id = 1
указано правильно; это обновит все Account_Balance
полей в accounts
до их старого баланса плюс изменение с Account_Id
1. Если это то, что вы хотите, это нормально, в противном случае вам может понадобиться дополнительный WHERE
предложение UPDATE
, т.е.
UPDATE accounts t1
CROSS JOIN (SELECT SUM(Credit)-SUM(Debit) AS `change`
FROM accounts
WHERE Account_Id=1) t2
SET t1.Account_Balance = t1.Account_Balance + t2.change
WHERE Account_Id = 1
Или для обновления всех учетных записей с их собственным изменением:
UPDATE accounts t1
JOIN (SELECT Account_Id, SUM(Credit)-SUM(Debit) AS `change`
FROM accounts
GROUP BY Account_Id) t2 ON t2.Account_Id = t1.Account_Id
SET t1.Account_Balance = t1.Account_Balance + t2.change
Вот демонстрационная версия всех трех запросов в работа.