2013-02-08 50 views
1

對不起措辭不佳的問題,但我不能完全弄清楚如何在沒有進入以下所有細節的情況下對其進行描述。如何使用INNER JOIN在UPDATE上多次添加值?

我有表有列價值,我試圖更新 ...

mysql> select * from t; 
+------+-------+ 
| k | value | 
+------+-------+ 
| 10 | 0.00 | 
+------+-------+ 

...從表v。表v使用ķ作爲外鍵...

mysql> select * from v; 
+------+-------+ 
| fk | value | 
+------+-------+ 
| 10 | 4.00 | 
| 10 | 5.00 | 
+------+-------+ 

我的理解是,這將是一個相當基本的更新與內部連接,就像這樣:

mysql> UPDATE t 
    -> INNER JOIN v on v.fk = t.k 
    -> SET t.value = t.value + v.value; 

我預計t.value爲9.00,但它出現爲4.00。

我知道我可以用子查詢和SUM來做,但是這將會運行在大量的數據上,所以我寧願儘可能地避免這種情況。有沒有辦法通過內連接來做到這一點?

回答

1

在子查詢中計算結果。

UPDATE t 
     INNER JOIN 
     (
      SELECT fk, SUM(value) totals 
      FROM v 
      GROUP BY fk 
     ) a ON t.k = a.fk 
SET  t.value = a.totals 
+0

HRM,這是一個有趣的一個。這會導致子查詢只執行一次嗎? – 2013-02-08 12:09:31

+0

是的,因爲它獲得了每個'fk'上所有值的總和。 – 2013-02-08 12:10:29

+0

經過測試,它非常完美。我會盡快接受答案。謝謝。 – 2013-02-08 12:15:05