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

MySQLで特定の重複レコードを新しい値に一括置換する方法

MySQLでは、UPDATE文とREPLACE()関数を組み合わせることで、テーブル内に存在する特定の重複レコード(同じ値が複数含まれるデータ)を、まとめて新しい値に置き換えることができます。本記事では、実際にサンプルテーブルを作成しながら、その手順をわかりやすく解説します。

1. サンプルテーブルを作成する

まず、以下のようにテーブルを作成します。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(50)
);
Query OK, 0 rows affected (0.62 sec)

Idカラムは自動採番(AUTO_INCREMENT)の主キー、Nameカラムは名前を格納する文字列型としています。

2. テストデータを挿入する

次に、INSERTコマンドを使っていくつかのレコードを追加します。ここでは意図的に「Chris」という同じ名前を2件登録しています。

mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name) values('Robert');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(Name) values('David');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name) values('Mike');
Query OK, 1 row affected (0.13 sec)

3. 現在のレコードを確認する

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

mysql> select *from DemoTable;

実行結果は以下のとおりです。

+----+--------+
| Id | Name   |
+----+--------+
|  1 | Chris  |
|  2 | Robert |
|  3 | Chris  |
|  4 | David  |
|  5 | Mike   |
+----+--------+
5 rows in set (0.00 sec)

このように、「Chris」という名前がId=1とId=3の2行に重複して存在していることが確認できます。

4. 重複している値を新しい値に置き換える

ここからが本題です。重複している「Chris」という名前を「Adam Smith」に置き換えるには、以下のようなUPDATE文を実行します。

mysql> update DemoTable set Name=replace(Name,'Chris','Adam Smith');
Query OK, 2 rows affected (0.17 sec)
Rows matched: 5 Changed: 2 Warnings: 0

REPLACE(対象カラム, '置換前の文字列', '置換後の文字列')という形式で指定します。「Rows matched: 5 Changed: 2」と表示されているように、全5行が走査され、うち2行(重複していたChrisの行)が更新されたことがわかります。

ポイント: REPLACE()関数は該当するすべての行に対して置換を行います。もし特定の1行だけを変更したい場合は、WHERE Id = 3のように条件を追加してください。

5. 更新結果を確認する

もう一度SELECT文でテーブルの中身を確認しましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。

+----+------------+
| Id | Name       |
+----+------------+
|  1 | Adam Smith |
|  2 | Robert     |
|  3 | Adam Smith |
|  4 | David      |
|  5 | Mike       |
+----+------------+
5 rows in set (0.00 sec)

重複していた「Chris」の2行が、どちらも「Adam Smith」に正しく置き換えられていることが確認できました。

まとめ

MySQLで重複レコードの値を新しい値にまとめて置き換えるには、UPDATE文とREPLACE()関数を組み合わせるのが最もシンプルな方法です。

  • 基本構文: UPDATE テーブル名 SET カラム名=REPLACE(カラム名, '旧値', '新値');
  • WHERE句を付けなければ、該当するすべての行が一括更新されます
  • 部分一致の文字列置換にも対応しているため、柔軟なデータ修正が可能です

大量のデータを扱う際は、事前にSELECT文で対象行を確認してからUPDATEを実行すると、意図しない更新を防げますので安心です。

  1. MySQLで特定のカラム名を持つテーブルを検索する方法

    MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a

  2. MySQLでDEFAULTキーワードを使ってデフォルト値を設定したテーブルを作成する方法

    MySQLでは、テーブル作成時にカラムのデータ型の後にDEFAULTキーワードを指定することで、そのカラムにデフォルト値を設定できます。INSERT文で値が指定されなかった場合、自動的にこのデフォルト値が適用されます。テーブルの作成例それでは、実際にデフォルト値を持つテーブルを作成してみましょう。mysql> create table demo33 -> ( -> id int not null auto_increment primary key, -> name varchar(20) not null, -> start_date date default(