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 . . . 然后更改子查询以聚合所需的值。此版本似乎与您试图对问题中的查询执行的操作相同。