[mySQL]CASE構文で条件分岐をSQL文で解決

mysql, データベースmysql


Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 86

Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 105

今回SQL文を書く機会がありました。phpで処理をする部分を普段書いていますが、SQL文での取得の段階で条件分岐を行い取ってきたいと思いましたので、調べたところ、mySQLでは、CASE構文というものが用意されているようですので、使ってみようと思いました。

以前SQLについて記事を書きましたので、そちらも参考にしてもらえると良いと思います。
mysqlの初期設定
mysqlユーザ追加
mysqlの仕組み
mysqlの仕組み(1)
mySQLのEXPLAINについて調べた
[SQL基本]テーブル結合の使い方

CASE 構文

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

条件分岐を行いたい時に,CASE〜始まる記述になります。WHENでは、通常WHERE句で使われるような記述で書くことができます。カラム名を指定して、値がどのような状態であるかを指定します。THEN以降で条件を満たした時に出力する値を指定します。

サンプル

ベースとなるSQL

select id,name,group from member;

member テーブル上でgroupがnullのレコードをgroup1にして取得したいとします。

CASE構文を使う

select id,name,createdGroup (case where createdGroup = null then group1) as createdGroup from member;

まとめ

これまで知らなかった構文や記述の仕方があると思い、今後もう少し調べて便利に使えるものを増やして行きたいと思います。