对于措辞不好的问题感到抱歉,但我无法弄清楚如何在没有详细说明的情况下对其进行说明。
我的表 t 有值列,我试图更新...
mysql> select * from t;
+------+-------+
| k | value |
+------+-------+
| 10 | 0.00 |
+------+-------+
...来自表 v 。表 v 使用 k 作为外键...
mysql> select * from v;
+------+-------+
| fk | value |
+------+-------+
| 10 | 4.00 |
| 10 | 5.00 |
+------+-------+
我的理解是,这将是一个相当基本的UPDATE INNER JOIN,如下所示:
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来完成它,但这将会运行大量的数据,所以如果可能的话,我更愿意避免这种情况。有什么方法可以通过内连接来实现这个目的吗?
答案 0 :(得分: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