2009年9月1日火曜日

MySQLのCASE構文

どうも、俺@残業中です。
忘れないために備忘録。

MySQLはCASE構文が使えるようになっています。
mysql> SELECT CASE WHEN 1=1 THEN 'true' ELSE 'FALSE' end;
+--------------------------------------------+
| case when 1=1 then 'true' else 'false' end |
+--------------------------------------------+
| true |
+--------------------------------------------+
1 row in set (0.00 sec)
となります。

構文は
CASE WHEN <条件式> THEN <真の場合> ELSE <偽の場合> END;
です。

応用して、例えば別テーブル(B)に自テーブル(A)を参照しているカラム(a_id)があり、BテーブルがAテーブルを参照しているデータを`refered`として取得する場合は
mysql> SELECT
CASE WHEN a_id>0 THEN 'refered' ELSE 'no refered' END
FROM A INNER JOIN B ON A.id=B.a_id;
で取得できます。

さらに拡張して、AテーブルのデータがBテーブルに参照されていた場合に、Aテーブルの`refered`カラムを`refered`、そうでない場合を`no refered`と更新したい場合は
mysql> UPDATE A INNER JOIN B ON A.id=B.a_id
SET refered= CASE WHEN a_id > 0 THEN 'refered' ELSE 'no refered' END;
のように、MySQLのUPDATE文+JOIN句でできます。

以上どえす。

0 件のコメント: