MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのSELECTクエリで個々のフィールド値を任意のキーにマッピングする方法

MySQLでは、SELECTクエリ内でCASE文またはIF()関数を使用することで、特定のフィールドの値(例:0や1のブール値)を「ENABLED」「DISABLED」のような分かりやすい文字列キーへ変換して表示できます。本記事では、両方の方法の構文と実際の使用例を解説します。

方法1:CASE文を使う

CASE文を使うと、条件に応じて返す値を柔軟に制御できます。基本構文は以下のとおりです。

SELECT yourColumnName1,yourColumnName2,yourColumnName3,.........N
(
    CASE WHEN yourColumnName = 1 THEN 'ENABLED'
    ELSE 'DISABLED'
    END
) AS anyVariableName
FROM yourTableName;

方法2:IF()関数を使う

よりシンプルな条件分岐であれば、IF()関数でも同じことが実現できます。構文は次のとおりです。

SELECT yourColumnName1,yourColumnName2,yourColumnName3,.........N
,IF(yourColumnName,'ENABLED','DISABLED') as anyVariableName FROM yourTableName;

動作確認用テーブルの作成

それでは、上記の構文を理解するためにサンプルテーブルを作成しましょう。テーブル作成のクエリは以下のとおりです。

mysql> create table MapKeys
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(20),
    -> isActive boolean,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.65 sec)

次に、INSERT文を使ってテーブルにレコードを挿入します。

mysql> insert into MapKeys(Name,isActive) values('Larry',true);
Query OK, 1 row affected (0.13 sec)

mysql> insert into MapKeys(Name,isActive) values('David',false);
Query OK, 1 row affected (0.16 sec)

mysql> insert into MapKeys(Name,isActive) values('Mike',true);
Query OK, 1 row affected (0.14 sec)

mysql> insert into MapKeys(Name,isActive) values('Carol',false);
Query OK, 1 row affected (0.17 sec)

mysql> insert into MapKeys(Name,isActive) values('Sam',false);
Query OK, 1 row affected (0.15 sec)

mysql> insert into MapKeys(Name,isActive) values('Bob',true);
Query OK, 1 row affected (0.19 sec)

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from MapKeys;

実行結果は以下のとおりです。isActive列には0か1が格納されています。

+----+-------+----------+
| Id | Name  | isActive |
+----+-------+----------+
|  1 | Larry |        1 |
|  2 | David |        0 |
|  3 | Mike  |        1 |
|  4 | Carol |        0 |
|  5 | Sam   |        0 |
|  6 | Bob   |        1 |
+----+-------+----------+
6 rows in set (0.00 sec)

CASE文でキーをマッピングする

ここからが本題です。CASE文を使ってisActiveの値を「ENABLED」/「DISABLED」というキーにマッピングしてみましょう。

mysql> select Id,Name,
    -> (
    -> CASE WHEN isActive = 1 THEN 'ENABLED'
    -> ELSE 'DISABLED'
    -> END
    -> ) AS Status
    -> from MapKeys;

出力結果:

+----+-------+----------+
| Id | Name  | Status   |
+----+-------+----------+
|  1 | Larry | ENABLED  |
|  2 | David | DISABLED |
|  3 | Mike  | ENABLED  |
|  4 | Carol | DISABLED |
| 5  | Sam   | DISABLED |
| 6  | Bob   | ENABLED  |
+----+-------+----------+
6 rows in set (0.00 sec)

IF()関数で同じ結果を得る

同様の処理は、IF()関数を使っても簡単に実現できます。第1引数の条件が真なら第2引数の値を、偽なら第3引数の値を返します。

mysql> select Id,Name,if(isActive,'ENABLED','DISABLED') as Status from MapKeys;

出力結果:

+----+-------+----------+
| Id | Name  | Status   |
+----+-------+----------+
| 1 | Larry | ENABLED   |
| 2 | David | DISABLED |
| 3 | Mike  | ENABLED |
| 4 | Carol | DISABLED |
| 5 | Sam   | DISABLED |
| 6 | Bob   | ENABLED  |
+----+-------+----------+
6 rows in set (0.00 sec)

まとめ


このように、MySQLのSELECTクエリではCASE文やIF()関数を活用することで、生の数値データ(0/1など)をユーザーにとって読みやすいステータス表現に変換できます。単純な二択の分岐ならIF()関数が簡潔でおすすめですが、3つ以上の条件や複雑な判定が必要な場合はCASE文の方が柔軟に対応できます。用途に応じて使い分けるとよいでしょう。

  1. JavaでMySQLのSELECTクエリにPreparedStatement(プリペアドステートメント)を使う方法

    executeQuery()メソッドの基本的な使い方JavaからMySQLに対してSELECTクエリを実行する場合は、PreparedStatementオブジェクトのexecuteQuery()メソッドを使用します。基本構文は以下の通りです。yourPreparedStatementObject = yourConnectionObject.prepareStatement(yourQueryName);yourResultSetObject = yourPreparedStatementObject.executeQuery();それでは、実際にサンプルデータベース「sample」を使って手

  2. MySQLでテーブルに存在しない値だけを抽出する方法(UNION ALLとNOT EXISTSの活用)

    MySQLでテーブルに存在しない値を照会するには? MySQLで「テーブルにまだ登録されていない値だけ」を取得したい場合、UNION ALLとWHERE NOT EXISTSを組み合わせるのが有効です。サブクエリで候補となる値をUNION ALLで列挙し、NOT EXISTSによって既にテーブル内に存在する値を除外することで、存在しない値のみを抽出できます。 ここでは、実際の手順をサンプルコードとともに解説します。 1. サンプルテーブルを作成する まず、自動採番(AUTO_INCREMENT)のカラムを持つテーブルを作成します。 mysql> create table DemoTab