MySQLで条件に基づいてフィールドの値を更新するクエリの書き方
MySQLで条件に基づいてフィールドを更新する方法
MySQLでは、UPDATE文とIF()関数を組み合わせることで、指定した条件を満たす場合のみ別の値に置き換え、それ以外の場合は元の値を維持したまま更新することができます。この記事では、実際にサンプルテーブルを作成し、手順を追いながら解説します。
1. テーブルの作成
まず、以下のコマンドでテーブルを作成します。
mysql> create table DemoTable1436
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (1.06 sec)
このテーブルには、自動採番される主キー「Id」と、名前を格納する「Name」カラムが定義されています。
2. レコードの挿入
次に、INSERT文を使用していくつかのレコードを挿入します。
mysql> insert into DemoTable1436(Name) values('Chris');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1436(Name) values('David');
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable1436(Name) values('Bob');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1436(Name) values('David');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1436(Name) values('David');
Query OK, 1 row affected (0.31 sec)3. 挿入されたレコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1436;
実行結果は以下の通りです。
+----+-------+
| Id | Name |
+----+-------+
| 1 | Chris |
| 2 | David |
| 3 | Bob |
| 4 | David |
| 5 | David |
+----+-------+
5 rows in set (0.00 sec)
4. 条件に基づく更新クエリの実行
ここが本題です。以下のクエリでは、「Id=2」かつ「Nameが'David'」である場合のみ、値を'Carol Taylor'に更新します。条件を満たさない場合はIF()関数によって現在の値がそのまま保持されます。
mysql> update DemoTable1436
-> set Name=IF(Name='David','Carol Taylor',Name)
-> where Id=2;
Query OK, 1 row affected (0.31 sec)
Rows matched: 1 Changed: 1 Warnings: 0
5. 更新結果の確認
もう一度テーブルの内容を確認してみましょう。
mysql> select * from DemoTable1436;
実行結果は以下の通りです。
+----+--------------+
| Id | Name |
+----+--------------+
| 1 | Chris |
| 2 | Carol Taylor |
| 3 | Bob |
| 4 | David |
| 5 | David |
+----+--------------+
5 rows in set (0.00 sec)
まとめ
UPDATE文のSET句内でIF(条件, 真の場合の値, 偽の場合の値)を使用することにより、WHERE句で絞り込んだ対象レコードに対して、さらに細かい条件分岐を加えた更新が可能になります。今回の例では、Id=2のレコードだけが'David'から'Carol Taylor'に変更され、他の'David'のレコード(Id=4、5)は影響を受けていません。この手法は、一つのクエリで柔軟な条件付き更新を実現したい場合に非常に便利です。
-
【MySQL】別のテーブルのカラムを参照してカラムを更新する方法
別のMySQLテーブルのカラム値を参照しながら、現在のテーブルのカラムを更新したい場合には、JOIN(結合)の概念を利用します。ここでは、実際にテーブルを作成しながら、具体的な手順をわかりやすく解説していきます。1つ目のテーブル(更新される側)を作成するまず、更新対象となるテーブル「DemoTable1」を作成しましょう。mysql> create table DemoTable1 -> ( -> Id int, -> Name va
-
MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法
MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &