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 |
+------+-------+

私の理解では、これは次のように、内部結合を使用したかなり基本的な更新になります。

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 に答える