Life is Really Short, Have Your Life!!

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

updateのsetでサブクエリ

サブクエリを使いたい時なんて、「別のテーブルから抽出した値をブチ込む or 条件にする」しかないよね。基本的に。ちなみにSELECT句でもサブクエリ使えるんだよね。面白いもんです。ググってもあんまりいいサンプルなかったんで、メモ代わりに書いておきます。set句に入れる場合はこんな感じ。mysql5で動作確認してます。SQL自体はテストデータ作成用なんで、大して意味無いよー。

UPDATE
    order_statuses as a
SET
    updated = (SELECT
                    orderdate
                FROM
                    orders as b
                where
                    a.order_id = b.id 
                )
where  
    a.status = 'xxxxxx'

あとSELECTしたものをINSERTできることを知らない人もたまにいるので、合わせてリンク貼っておきます。サブクエリを知らなくて2発SQL投げてresultsetをアプリで整形するとか、良い子のみんなはそういう昔の僕みたいなことはやめよう!あー、全然関係ないけどORマッパーでCASE-WHENサポートしてくれないかなー。where句は色々やってくれるんだけど、case-whenのarrayを投げるとselect句を形成してくれるとか、そんなのあると嬉しいなー。cakephp的に書くと、こういうイメージ。

<?php
$this->Model->findAllbyXXX($condition,
      array("id","name","tanto"=>array(
                    "0"=>"A地区","1"=>"B地区","2"=>"C地区")))

担当者の営業地区みたいなのをこうやって分岐して表示させてあげる、みたいな。where句で分岐させたくないのでSELECTで分岐させるようなことが書けるようになるとうれすぃ!# sqlで頑張れと言われそうだけどw フリーダムすぐるよなーw

参考リンク

あと、SQLを学習できるWebサービスを作りました。