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

MySQLのCASE文でcolumn1がNULLの場合にNULLを返し、それ以外はcolumn2を返す方法


MySQLで「あるカラムがNULLの場合はNULLを返し、それ以外の場合は別のカラムの値を返す」といった条件分岐を実現したい場合は、CASE文を利用します。この記事では、「Marks1がNULLであればNULLを返し、NULLでなければMarks2の値を返す」という処理を、実際のサンプルコードとともに解説します。

サンプルテーブルの作成

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> Name varchar(20),
    -> Marks1 int,
    -> Marks2 int
    -> );
Query OK, 0 rows affected (0.72 sec)

テストデータの挿入

次に、insertコマンドを使ってテーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable values('Chris',45,null);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('David',null,78);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Bob',67,98);
Query OK, 1 row affected (0.14 sec)

テーブルの内容を確認する

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

mysql> select *from DemoTable;

実行すると、次のような出力が得られます。

+-------+--------+--------+
| Name  | Marks1 | Marks2 |
+-------+--------+--------+
| Chris |    45 |  NULL |
| David |  NULL |    78 |
| Bob  |    67 |    98 |
+-------+--------+--------+
3 rows in set (0.00 sec)

CASE WHENを使った条件分岐クエリ

以下が、CASE WHENを実装したクエリです。「Marks1 is null」の条件を評価し、NULLの場合はnullを返し、それ以外の場合はMarks2の値を返します。

mysql> select *,
    -> (case when Marks1 is null then null else Marks2 end ) as Value
    -> from DemoTable;

このクエリの実行結果は以下のとおりです。

+-------+--------+--------+-------+
| Name  | Marks1 | Marks2 | Value |
+-------+--------+--------+-------+
| Chris |    45 |  NULL |  NULL |
| David |  NULL |    78 |  NULL |
| Bob  |    67 |    98 |    98 |
+-------+--------+--------+-------+
3 rows in set (0.00 sec)

結果のポイント

出力結果を確認すると、動作は次のようになっています。

  • David(Marks1がNULL):条件に該当するため、ValueにはNULLが返される。
  • Chris(Marks1に値があり、Marks2がNULL):else句でMarks2の値がそのまま返されるため、結果はNULLになる。
  • Bob(両方に値がある):Marks2の値である98がValueとして返される。

なお、単に「最初に見つかった非NULLの値」を取得したいだけの場合は、COALESCE関数を使うという選択肢もあります。しかし、今回のように「特定のカラムがNULLかどうかを判定し、条件に応じて異なる値を返したい」ケースでは、CASE文の方が柔軟にロジックを記述できるのでおすすめです。


  1. MySQLのCASE WHENステートメントで条件別のカウントを実行する方法

    条件に応じてレコードをカウントしたい場合には、CASE WHENステートメントを活用すると便利です。この記事では、サンプルテーブルを作成し、SUM関数と組み合わせて条件別の件数を集計する手順を、実行結果つきでわかりやすく解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成しましょう。 mysql> create table DemoTable1910 ( FirstName varchar(20), Marks int ); Query OK, 0 rows affected (0.00 sec) 2. レコードの挿入 続い

  2. MySQLでNULLの場合のみ列を更新し、両方の列がNULLでなければ何もしない方法

    列がNULLの場合にのみ新しい値を更新し、すでに値が入っている列はそのまま維持したい——こんな要件はMySQLでよく発生します。このような場合、IF()関数とIS NULL演算子を組み合わせることで簡単に実現できます。両方の列がNULLでない行には、実質的に何も変更が加わりません。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1976 ( FirstName varchar(20), LastName varchar(20) );Query OK, 0 rows affected (0.