Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

update文にcase句が使えるなんて知らなかった

いや、これはすごいな。

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