4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQLの条件分岐の仕方

Posted at

最近、レガシーコードの改修でどうしても条件分岐を伴った生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に寄せすぎると危ないですが、演算結果が負の値の時に...  みたいな処理をアプリケーション側で仕込むのは面倒だったりするので、その時に使ってみてもいいかもしれないですね。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?