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制約が設定されている場合は、エラーが発生して更新に失敗する点にも注意が必要
-
MySQLのUPDATEとIF()で条件に基づきテーブルの全行を2つの値のみに一括更新する方法
MySQLで条件に基づいてテーブルのすべての行を更新し、値を2種類だけに限定したい場合は、UPDATE文とIF()関数を組み合わせるのが効果的です。IF()関数は「IF(条件, 真の場合の値, 偽の場合の値)」という形式で動作するため、たった1つのクエリで柔軟な一括更新が可能になります。この記事では、実際にテーブルを作成し、データを挿入してから、条件に基づく更新を実行するまでの手順を順番に解説します。ステップ1:テーブルを作成するまず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable ( &n
-
MySQLでWHERE句に複数の条件を指定してデータを更新する方法
MySQLでWHERE句に複数の値を指定して更新する方法MySQLのUPDATE文では、WHERE句に複数の条件を組み合わせることで、より正確に対象のレコードを絞り込んで更新することができます。AND演算子やOR演算子を使うことで、複数のカラムの値を条件として指定可能です。この記事では、実際にテーブルを作成し、WHERE句に複数の条件を指定してデータを更新する手順を具体的な例とともに解説します。まずはテーブルを作成する最初に、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -&