2017-08-09 51 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是下一個評論: –