• 締切済み

まとめて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になるらしく、減算処理が行われません。 上手くまとめて実行できる良い書き方は無いでしょうか。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

すなおに SET TB2.point = TB2.point - TB1.remainder_point の処理をしたあとに SET TB1.remainder_point = 0 のSQLを再度発行すればいいでしょう。 そんな手間を惜しむほどのものでもないし。

  • moousi
  • ベストアンサー率70% (21/30)
回答No.1

問題ないような? 下記のような構成で、その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) ;

kaz33
質問者

補足

記入頂いたテーブルとデータを実行し、私の書いたSQLを実行したところ、table2のポイントが全て200のままです。。 table1はpointが0になるのですが。 MySQL5.0.51を使ってます。 バージョンの違いでしょうか・・・・

関連するQ&A