Mysql 你可以';t指定目标表';资产';for update in FROM子句
我的问题Mysql 你可以';t指定目标表';资产';for update in FROM子句,mysql,sql,Mysql,Sql,我的问题 UPDATE assets SET assets.Amount = (SELECT SUM(assets.Amount) - NEW.Amount FROM assets WHERE NEW.UserId = assets.UserId and NEW.AccountId = assets.AccountId) AS TmpAssets WHERE NEW.UserId = assets.UserId and NEW.AccountId = assets.AccountId 是的
UPDATE assets SET assets.Amount = (SELECT SUM(assets.Amount) - NEW.Amount FROM assets WHERE NEW.UserId = assets.UserId and NEW.AccountId = assets.AccountId) AS TmpAssets
WHERE NEW.UserId = assets.UserId and NEW.AccountId = assets.AccountId
是的,您不能这样做,因为您在更新表时正在从表中进行子选择。
您最好创建一个tmp表并从中执行子查询。MySQL不允许您在
update
或delete
的子查询中使用正在更新的表。解决这个问题很容易
下面是一种使用update
/join
的方法:
UPDATE assets a JOIN
(select sum(a.Amount) as sumamount, a.UserId, a.AccountId
from assets a
where NEW.UserId = a.UserId and NEW.AccountId = a.AccountId
group by a.UserId, a.AccountId
) anew
on NEW.UserId = a.UserId and NEW.AccountId = a.AccountId
SET a.Amount = anew.sumamount - new.Amount;
试试这个:
UPDATE assets SET assets.Amount = (select temp.val from (SELECT (SUM(assets.Amount) -
NEW.Amount) val from assets WHERE
NEW.UserId = assets.UserId and NEW.AccountId = assets.AccountId) temp)
WHERE NEW.UserId = assets.UserId and NEW.AccountId = assets.AccountId ;
问得好,但我有个问题。我在表中有两条记录,金额分别为20和30,这两条金额随新条目而更改,我需要两条记录(50)的总数,然后更改。非常需要help@PutraLZendrato . . . 然后更改子查询以聚合所需的值。此版本似乎与您试图对问题中的查询执行的操作相同。