1

对于措辞不佳的问题,我很抱歉,但如果不深入了解以下所有细节,我无法弄清楚如何表达它。

我有表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 |
+------+-------+

我的理解是,这将是一个带有 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 来做到这一点,但这将在大量数据上运行,所以如果可能的话,我宁愿避免这种情况。有没有办法通过内部连接来做到这一点?

4

1 回答 1

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
于 2013-02-08T12:05:21.823 回答