- 締切済み
まとめてUPDATEしたいのですが。
まとめてUPDATEしたいのですが。 下記のようなUPDATE文を実行したいのですが、思ったとおりの動作をしません。 UPDATE table1 AS TB1 INNER JOIN table2 AS TB2 ON TB1.table2_id=TB2.id SET TB2.point = TB2.point - TB1.remainder_point, TB1.remainder_point = 0 WHERE TB1.remainder_point > 0 最初の1レコード目だけ「TB2.point = TB2.point - TB1.remainder_point」が実行されますが、 その後のレコードが「TB1.remainder_point = 0」で値が全て0になるらしく、減算処理が行われません。 上手くまとめて実行できる良い書き方は無いでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
すなおに SET TB2.point = TB2.point - TB1.remainder_point の処理をしたあとに SET TB1.remainder_point = 0 のSQLを再度発行すればいいでしょう。 そんな手間を惜しむほどのものでもないし。
- moousi
- ベストアンサー率70% (21/30)
問題ないような? 下記のような構成で、そのUPDATE文を実行してみたところ、すべて更新されました。 create table table1 (id int auto_increment primary key,table2_id int,remainder_point int); create table table2 (id int auto_increment primary key,point int); insert into table2 values (11,200) ,(null,200) ,(null,200) ,(null,200) ; insert into table1 values (null,11,15) ,(null,12,20) ,(null,13,30) ,(null,14,0) ;
補足
記入頂いたテーブルとデータを実行し、私の書いたSQLを実行したところ、table2のポイントが全て200のままです。。 table1はpointが0になるのですが。 MySQL5.0.51を使ってます。 バージョンの違いでしょうか・・・・