いや、これはすごいな。
update books set price = CASE WHEN price < 250 then price * 1.5 ELSE price * 0.9 END;
見ての通りpriceが250円未満なら1.5をかけ、それ以外なら0.9をかけている。自己結合したい場合など、これを使えば結合しなくても良さそう。MYSQL使いは覚えておいたほうがいいかもなー
実際にこういうSQLを発行してみました
update items set cost_price = CASE WHEN price = 1900 then cost_price = 950 WHEN price = 1500 then cost_price = 650 ELSE cost_price END where maker_id = 30;
実際にあった例ですが、あるメーカーの商品で1900円の定価の商品の原価は950円、1500円の場合は650円、それ以外は別段更新が必要ないというメンテをしなくてはなりませんでした。それを一発で更新できるのが上記のSQL。
mysqlは自己結合ができないので、自分のテーブルのあるカラムを別のカラムの何かを元に更新したい場合には使い勝手がいい。
ただ、何かの条件によって同一SQLでUPDATEする値を切り替えるような設計はメンテナンス性は低いのでおススメできへん。そもそもこんなsqlを頻繁に発行せなあかんsqlを業務に組み込んじゃいかんでしょ。
SQLを学習できるWebサービスを作りました。
www.start-sql.net