我有一个名为 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/