最近、レガシーコードの改修でどうしても条件分岐を伴った生SQLを書かないと行けない機会があったので、その時のメモです。
IF
SQLの場合はIF文とIF関数があります。
IF関数
IF(10 > 5, "TRUE", "FASE") -- TRUEが返る
という書き方をします。
第一引数には、条件を第二引数には条件がtrueの時の値を、第三引数には条件がfalseの時の値を入れます。
実際にUPDATE文とかと絡めると
UPDATE test SET testcolumn = IF(testcolumn > 0, 1,-1);
こんな書き方ができます。
IF文
こちらはアプリケーションのコードのような書き方です。
-- 適当な値 n,m
IF n > m THEN 1
ELSE IF n = m THEN 0
ELSE -1
END IF
わかりやすい。
更新処理などと絡めると
UPDATE test SET column1 = IF column1 > column2 THEN 1
ELSE IF column1 = column2 THEN 0
ELSE -1
END IF
こんな感じになります。
CASE文
CASE文はswitch文に相当する構文です。
-- 適当な値 n,m
CASE
WHEN n > m THEN 1
WHEN n = m THEN 0
ELSE -1
END
適当なクエリと絡めると
SELECT column1, column2,
CASE
WHEN column1 > column2 THEN 1
WHEN column1 = column2 THEN 0
ELSE -1
END AS value
FROM test;
最後に
分岐処理をSQLに寄せすぎると危ないですが、演算結果が負の値の時に... みたいな処理をアプリケーション側で仕込むのは面倒だったりするので、その時に使ってみてもいいかもしれないですね。