次のようなデータベースのテーブル B を更新しようとしています。
Table A:
id, amount, date, b_id
1,200,6/31/2012,1
2,300,6/31/2012,1
3,400,6/29/2012,2
4,200,6/31/2012,1
5,200,6/31/2012,2
6,200,6/31/2012,1
7,200,6/31/2012,2
8,200,6/31/2012,2
Table B:
id, b_amount, b_date
1,0,0
2,0,0
3,0,0
このクエリを使用すると、必要なすべてのデータを 1 回の選択で取得できます。
SELECT A.*,B.* FROM A LEFT JOIN B ON B.id=A.b_id WHERE A.b_id>0 GROUP BY B.id
id, amount, date, b_id, id, b_amount, b_date
1,200,6/31/2012,1,1,0,0
3,400,6/29/2012,1,1,0,0
ここで、選択した列の金額を b_mount に、日付を b_date にコピーしたいだけです
b_amount=amount, b_date=date
その結果
id, amount, date, b_id, id, b_amount, b_date
1,200,6/31/2012,1,1,200,6/31/2012
3,400,6/29/2012,1,1,400,6/29/2012
COALESCE() を試しましたが成功しませんでした。経験豊富な誰かがこれに対する解決策を持っていますか?
解決:
以下の回答のおかげで、私はこれを思い付くことができました。これはおそらく最も効率的な方法ではありませんが、1 回だけの更新であれば問題ありません。これにより、各グループの最初の対応するエントリが挿入されます。
REPLACE INTO A SELECT id, amount, date FROM
(SELECT A.id, A.amount, B.id as Bid FROM A INNER JOIN B ON (B.id=A.B_id)
ORDER BY A.id DESC)
GROUP BY Bid;