0

uid、date、count、amount の 4 つの行を持つ「Sales」というテーブルがあります。ある行のカウントと金額の値を、そのテーブルの別の行のカウント/金額の値でインクリメントしたいと考えています。例:

UID | Date       | Count | Amount|
1   | 2013-06-20 | 1     | 500   |
2   | 2013-06-24 | 2     | 1000  |

理想的な結果は、uid 2 の count/amount 値が uid 1 の値によってインクリメントされることです。

UID | Date       | Count | Amount|
1   | 2013-06-20 | 1     | 500   |
2   | 2013-06-24 | 3     | 1500  |

私の会社のデータベースは古いバージョンの MYSQL (3.something) であるため、サブクエリは実行できないことに注意してください。「update sales set count = count + 1」を実行する以外でこれが可能かどうか、および金額列についても同様に知りたいです。更新する行がたくさんあり、値を個別にインクリメントするのは、ご想像のとおりかなり時間がかかります。助けや提案をありがとう!

4

2 に答える 2

2

サブセレクトを使用しなくても、JOIN を実行できる場合があります。どの列を更新するかを決定するために行を相互にリンクしている列に関する説明からはわかりませんが、次のことからアイデアが得られるかもしれません

UPDATE Sales a
INNER JOIN Sales b
ON ..........
SET a.Count = a.Count + b.Count,
a.Amount = a.Amount + b.Amount

ただし、これがMySQLの古いバージョンで機能するかどうかはわかりません

行1の値に基づいて行2を更新するだけの場合は、次のようにする必要があります

UPDATE Sales a
INNER JOIN Sales b
ON a.uid = 2 AND b.uid = 1
SET a.Count = a.Count + b.Count,
a.Amount = a.Amount + b.Amount
于 2013-06-24T16:18:22.813 に答える
1

ほとんどの場合、サブクエリは結合として書き直すことができます...そしてMySQL 3.23でさえ複数のテーブルを持っていますUPDATE

そのようなことはおそらくうまくいくでしょう...しかし、私はそれをテストすることができません(MySQLのそのような古いバージョンをまだ使用しているのはあなただけなので;)

UPDATE Sales AS S1, Sales AS S2
    SET S1.`count` = S1.`count̀ +S2.`count`, S1.Amount = S1.Amount + S2.Amount
    WHERE S1.uid = 2 AND S2.uid = 1

ここでは簡単にするために、S1.uid を "2" に、S2.uid を "1" に明示的に設定します。これがこの行で機能する場合は、特定のニーズに対応する WHERE 句を使用できるはずです。

于 2013-06-24T16:17:17.897 に答える