【MySQL】3項演算子を実装する方法


ここではMySQLで、3項演算子を実装する方法を紹介しています。

3項演算子とは

3項演算子とは、「x = a ? b : c;」のようなもので、aとbの値が一致すればbを、aとcが一致していればcをxに代入します。

順々に条件を比較していき、初めに条件に一致した値を返すというものです。

3項演算子を実装する方法

3個上演算子を実装するには、CASE式とIF関数を使う方法があります。

CASE式を使う方法

CASE式を使うことで簡単に3項演算子を再現することが出来ます。

CASE式の基本的な使い方は次の通りです。

CASE WHEN 条件 THEN 真の場合の結果 
     [,WHEN 条件 THEN 真の場合の結果]
     [ELSE 条件に一致しない場合の結果]
END

CASE式では複数の条件を記述することが出来るので、次のようにSQLを組み立てることが出来ます。

SELECT 
 col1
 ,col2
 ,col3
 ,col4,
 CASE WHEN col1=col2 THEN COL2
     WHEN col1=col3 THEN COL3 
     WHEN col1=col4 THEN COL4
	 ELSE NULL
 END AS CHK 
FROM
 tab
;

実際にSQLを実行すると次のような結果になります。

mysql> SELECT col1,col2,col3,col4,CASE WHEN col1=col2 THEN COL2 WHEN col1=col3 THEN COL3 WHEN col1=col4 THEN COL4 ELSE NULL END AS CHK FROM tab;
+------+------+------+------+------+
| col1 | col2 | col3 | col4 | CHK  |
+------+------+------+------+------+
|   10 |   10 |   20 |   30 |   10 |
|   20 |   10 |   20 |   30 |   20 |
|   30 |   10 |   20 |   30 |   30 |
|  100 |   10 |   20 |   30 | NULL |
+------+------+------+------+------+
4 rows in set (0.00 sec)

IF関数を使う方法

IF関数を使うことでも3項演算子を再現することが出来ます。

IF関数の基本的な使い方は次の通りです。

IF(条件,真の場合の結果,偽の場合の結果)

IF関数はネストすることが出来るので、複数の条件を同時に判定することが出来ます。

SELECT 
 col1
 ,col2
 ,col3
 ,col4
 ,IF(col1=col2
     ,col2
     ,IF(col1=col3
         ,col3
         ,IF(col1=col4
             ,col4
	     ,NULL
          )
      )
  ) AS CHK
FROM
  tab
;

実際にSQLを実行すると次のような結果になります。

mysql> SELECT col1,col2,col3,col4,IF(col1=col2,col2,IF(col1=col3,col3,IF(col1=col4,col4,NULL))) AS CHK FROM tab;
+------+------+------+------+------+
| col1 | col2 | col3 | col4 | CHK  |
+------+------+------+------+------+
|   10 |   10 |   20 |   30 |   10 |
|   20 |   10 |   20 |   30 |   20 |
|   30 |   10 |   20 |   30 |   30 |
|  100 |   10 |   20 |   30 | NULL |
+------+------+------+------+------+
4 rows in set (0.00 sec)