1 つのアプローチ:
UPDATE user_table u
JOIN ( SELECT q.userid
, SUM(1.00) AS deposit
FROM (
-- original OP query goes here
) q
GROUP BY q.userid
) r
ON r.userid = u.userid
SET u.balance = u.balance + r.deposit
表示された結果セットを返す元の OP クエリを使用し、それをインライン ビューにします (上記のクエリではqとしてエイリアス化されています)。
そこから、ユーザー ID の個別のリストと、そのユーザー ID が結果セットに表示される回数を照会します。これにより、ユーザー名と入金額 (ユーザー ID が表示されるたびに 1 ドル) が得られます (一部のデータベースでは、値が 10 進数であることを確認するために、値を 1 ではなく 1.0 と指定する必要がある場合があります。SUM は、私たちが達成しようとしていること。)
そのインライン ビュー ( r ) をユーザー テーブルに結合し、そのユーザーの現在の残高に預金額を追加します (残高が 10 進数のドル (1.00 = 1 ドル) として格納されていると仮定します)。
テストするには、 をステートメントに変換しUPDATE
ますSELECT
。
SET
" "句を削除
- "
ORDER BY
" 句 (オプション) を追加して、結果を決定します
- " " キーワードを削除して
UPDATE
置き換えます
と:
SELECT r.userid
, r.deposit
, u.balance AS old_balance
, u.balance + r.deposit AS new_balance
, u.userid
FROM
全選択:
SELECT r.userid
, r.deposit
, u.balance AS old_balance
, u.balance + r.deposit AS new_balance
, u.userid
FROM user_table u
JOIN ( SELECT q.userid
, SUM(1.00) AS deposit
FROM (
-- original OP query goes here
) q
GROUP BY q.userid
) r
ON r.userid = u.userid
注WHERE 句はありません。JOIN 述部 (ON 句内) は、ユーザー テーブルで選択/影響を受ける行を決定するものです。