重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

まとめて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になるらしく、減算処理が行われません。


上手くまとめて実行できる良い書き方は無いでしょうか。

A 回答 (2件)

すなおに



SET TB2.point = TB2.point - TB1.remainder_point

の処理をしたあとに

SET TB1.remainder_point = 0

のSQLを再度発行すればいいでしょう。
そんな手間を惜しむほどのものでもないし。
    • good
    • 0

問題ないような?


下記のような構成で、その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を使ってます。
バージョンの違いでしょうか・・・・

補足日時:2010/10/28 15:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す