mysql - 高效更新MySql中的多行

标签 mysql sql-update

我有一个名为 Funds 的表,我想将每个 ClientId 列的 Amount 列的每一行更新为 Amount+2。

选择标准是表 BetsPlaced 中的每个 ClientId,该表可以包含一个 ClientId 的多行。当我运行以下 sql 时,每个 ClientId 的资金表都会更新,但仅更新一次。如何制定 SQL 以便每个事务在发生时就提交?

例如,“资金”表中的“ClientId 22133 金额”设置为 £500。

BetsPlaced 表中有 10 行 ClientId 22133,一行代表金额 2,因此更新应将金额设置为金额+2,但执行 10 次并将金额设置为 £520。

update Funds 
set    Amount=Amount+2, 
       LastUpdated=now() 
where  ClientId in (
           select x.ClientId from (
               select b.ClientId from betsplaced b
           ) as x
        );

如果有任何不清楚的地方,我们深表歉意,很乐意进一步解释。我通过对 BetsPlaced 中的所有行运行 while 循环来解决这个问题,但它很慢,我希望一些智能 sql 代码可以运行得更快。

最佳答案

也许是这样的:

update Funds F INNER JOIN
(SELECT ClientID, COUNT(ClientID) NumberTimes FROM BetsPlaced GROUP BY ClientID) B ON B.ClientID = F.ClientID
 set Amount=Amount+(2 * B.NumberTimes), LastUpdated=now();

关于mysql - 高效更新MySql中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597075/

相关文章:

sql - 使用游标多次更新 pgsql

php - 如何使用 PHP 将 session 数组插入 MySQL DB

php - 如何将值传递给模态?

mysql - 替换行内的部分值

python - Django "Running migrations": django. db.utils.OperationalError : (2013, 'Lost connection to MySQL server during query' 期间出错)

php - 同时 INSERT 和 Update 或在 SQL 查询中使用 Transact

mysql - MongoDB 相当于 NOW() + INTERVAL

mysql - SQL 将值更新为另一个表中的值

mysql - SQL/Wordpress - 删除评论字段的查询

sql - 是否可以使用当前行的非空单元格的数量来更新列?