【MySQL】2番目の列がNULLでない場合に、ある列のデータを別の列へ更新する方法
はじめに
MySQLである列(カラム)のデータを別の列にコピーして更新したい場合、UPDATE文とWHERE句を組み合わせることで簡単に実現できます。本記事では、「2番目の列がNULLでない行のみ」を対象に、ある列の値を別の列へ反映させる手順を具体例とともに解説します。
1. テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable
(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserFirstName varchar(20),
ListOfName varchar(20)
);
Query OK, 0 rows affected (0.59 sec)
このテーブルには、主キーとなる「UserId」と、文字列型の「UserFirstName」「ListOfName」の3つの列が定義されています。
2. サンプルデータの挿入
次に、INSERT文を使ってテーブルにレコードを挿入します。ここでは意図的にNULLを含むデータも登録しています。
mysql> insert into DemoTable(UserFirstName,ListOfName) values('John','Larry');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values('Carol',null);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values('David','Sam');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values('Bob',null);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable(UserFirstName,ListOfName) values(null,null);
Query OK, 1 row affected (0.18 sec)3. 現在のデータを確認する
SELECT文で全レコードを表示し、更新前の状態を確認しておきましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+--------+---------------+------------+
| UserId | UserFirstName | ListOfName |
+--------+---------------+------------+
| 1 | John | Larry |
| 2 | Carol | NULL |
| 3 | David | Sam |
| 4 | Bob | NULL |
| 5 | NULL | NULL |
+--------+---------------+------------+
5 rows in set (0.00 sec)
4. 列がNULLでない場合のみ別の列で更新するUPDATE文
ポイントは、WHERE句に「ListofName IS NOT NULL」という条件を指定することです。これにより、ListOfName列がNULLではない行だけが更新対象になります。
mysql> update DemoTable set UserFirstName=ListOfName where ListOfName is not null;
Query OK, 2 rows affected (0.26 sec)
Rows matched: 2 Changed: 2 Warnings: 0
実行結果を見ると、「2 rows affected」と表示されており、条件に合致した2行のみが更新されたことがわかります。
5. 更新結果の確認
UserFirstName列が正しく更新されているか、再度SELECT文で確認しましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+--------+---------------+------------+
| UserId | UserFirstName | ListOfName |
+--------+---------------+------------+
| 1 | Larry | Larry |
| 2 | Carol | NULL |
| 3 | Sam | Sam |
| 4 | Bob | NULL |
| 5 | NULL | NULL |
+--------+---------------+------------+
5 rows in set (0.00 sec)
結果のポイント
- UserId = 1 の行:UserFirstNameが「John」から「Larry」に更新されました。
- UserId = 3 の行:UserFirstNameが「David」から「Sam」に更新されました。
- UserId = 2、4、5 の行:ListOfNameがNULLのため、元の値のまま変更されていません。
まとめ
MySQLである列の値を別の列に反映させたい場合は、「UPDATE テーブル名 SET コピー先列 = コピー元列 WHERE コピー元列 IS NOT NULL」という構文を使います。IS NOT NULL条件を付けることで、NULLが含まれる行を誤って上書きすることなく、安全にデータを更新できるのが大きなメリットです。大量データの一括修正やデータ移行の際にも役立つテクニックなので、ぜひ覚えておきましょう。
-
MySQLで1つのスキーマから別のスキーマへデータを挿入する方法
MySQLでは、INSERT INTO ... SELECT文を使うことで、あるデータベース(スキーマ)から別のデータベースへ簡単にデータをコピーできます。ここでは、「web」と「test」という2つのデータベースを例に、具体的な手順を解説します。 基本構文 スキーマ間でデータを挿入する際の基本構文は以下の通りです。 insert into データベース名2.テーブル名2 select *from データベース名1.テーブル名1; ポイントは、テーブル名の前に「データベース名.(ドット)」を付けることです。これにより、現在接続しているデータベースに関係なく、任意のスキーマのテーブルを指定できま
-
【MySQL】別のテーブルのデータを参照してテーブルを更新する方法(UPDATE+JOIN)
MySQLでは、UPDATEコマンドとJOINを組み合わせることで、別のテーブルのデータを参照しながら、対象のテーブルを効率的に更新できます。本記事では、2つのテーブルを使った具体的なサンプルを通じて、その手順をわかりやすく解説します。 手順1:参照元のテーブルを作成する まず、氏名データを保持する1つ目のテーブル「demo54」を作成します。 mysql> create table demo54-> (-> firstName varchar(20),-> lastName varchar(20)-> );Query OK, 0 rows affected (