ここでは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)