2017-08-09 50 views
0

我有一个名为Funds的表我想更新每个ClientId列的Amount Amount by Amount + 2列的每一行。有效更新MySql中的多行

选择标准是来自表BetsPlaced的每个ClientId,它可以包含一个ClientId的多行。当我运行以下sql时,每个ClientId的Funds表更新但只有一次。我该如何制定SQL,以便在发生每笔交易时进行交易?

例如,客户端ID 22133金额在基金表中设置为500英镑。

ClientId 22133的BetsPlaced表中有10行,一行代表金额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代码可以更快地运行它。

回答

0

也许是这样的:

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(); 
+0

绝对精彩爵士!我很感激。它几乎在需要我按下按钮的同一时间运行!谢谢 –

+0

乐意提供帮助。干杯!我不是一个先生虽然;) –

+0

嗨 - 我不知道我是否可以再次麻烦你。我有一个积累的价值观,我想展示到最接近的1000,直到它达到下一个千年。因此,1800的值应该默认为1000,所以1999年,但2001年,2022年,2100年应该默认为2000年。当我使用循环命令-3时,它向上推500以上的任何东西。我运行的SQL是下一个评论: –