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

UPDATE文のSET句でサブクエリが行を返さない場合、MySQLはNULLを返す

UPDATE文のSET句のサブクエリが行を返さない場合、MySQLはNULLを返す

UPDATEステートメントのSET句で新しい値を割り当てるために使用したサブクエリが、1行も行を返さなかった場合、MySQLはその列にNULL値を代入します。以下の例でその動作を実際に確認してみましょう。

サンプルテーブルの確認

まず、今回使用する「student」テーブルと「info」テーブルの内容を確認します。

mysql> Select * from student;

+----+---------+-----------+
| Id | Name    | grade     |
+----+---------+-----------+
| 1  | Rahul   | Good      |
| 2  | Gaurav  | Good      |
| 3  | Raman   | Excellent |
| 4  | Harshit | Average   |
| 5  | Aarav   | Best      |
| 6  | Ram     | average   |
+----+---------+-----------+

6 rows in set (0.00 sec)

mysql> select * from info;

+------+-----------+
| id   | remarks   |
+------+-----------+
| 1    | Good      |
| 2    | Good      |
| 3    | Excellent |
| 4    | Average   |
| 5    | Best      |
+------+-----------+

5 rows in set (0.00 sec)

この2つのテーブルを見ると、「student」テーブルには6行のデータがあり、id = 6 のレコード(Ram)の「grade」の値は「average」になっています。一方、「info」テーブルには5行しかデータが存在しません。

UPDATE文の実行

続いて、以下のUPDATE文を実行します。このクエリ内のサブクエリは、id = 6 に対応する行を「info」テーブルから取得しようとしますが、該当する行が存在しないため、SET句に渡すべき新しい値がありません。このような場合、MySQLはNULL値を代入します。

mysql> UPDATE STUDENT SET grade = (SELECT remarks from info WHERE info.id = student.id) WHERE id = 6;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> Select * from student;

+----+---------+-----------+
| Id | Name    | grade     |
+----+---------+-----------+
| 1  | Rahul   | Good      |
| 2  | Gaurav  | Good      |
| 3  | Raman   | Excellent |
| 4  | Harshit | Average   |
| 5  | Aarav   | Best      |
| 6  | Ram     | NULL      |
+----+---------+-----------+

6 rows in set (0.00 sec)

実行後の「student」テーブルを確認すると、id = 6 の「grade」の値が「average」から「NULL」に更新されていることがわかります。これは、サブクエリが該当行を返さなかったため、SET句にNULLが割り当てられたことを示しています。

ポイントまとめ

  • UPDATE文のSET句でスカラーサブクエリを使用した場合、サブクエリが0行を返すとNULLが代入される
  • 意図しないNULLの代入を避けたい場合は、WHERE句の条件を見直したり、COALESCE関数でデフォルト値を指定するなどの対策が有効
  • 対象の列にNOT NULL制約が設定されている場合は、エラーが発生して更新に失敗する点にも注意が必要
  1. MySQLのUPDATEとIF()で条件に基づきテーブルの全行を2つの値のみに一括更新する方法

    MySQLで条件に基づいてテーブルのすべての行を更新し、値を2種類だけに限定したい場合は、UPDATE文とIF()関数を組み合わせるのが効果的です。IF()関数は「IF(条件, 真の場合の値, 偽の場合の値)」という形式で動作するため、たった1つのクエリで柔軟な一括更新が可能になります。この記事では、実際にテーブルを作成し、データを挿入してから、条件に基づく更新を実行するまでの手順を順番に解説します。ステップ1:テーブルを作成するまず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable (    &n

  2. MySQLでWHERE句に複数の条件を指定してデータを更新する方法

    MySQLでWHERE句に複数の値を指定して更新する方法MySQLのUPDATE文では、WHERE句に複数の条件を組み合わせることで、より正確に対象のレコードを絞り込んで更新することができます。AND演算子やOR演算子を使うことで、複数のカラムの値を条件として指定可能です。この記事では、実際にテーブルを作成し、WHERE句に複数の条件を指定してデータを更新する手順を具体的な例とともに解説します。まずはテーブルを作成する最初に、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -&