2013-02-08 48 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