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

MySQLテーブルからJOINを使って複数のエントリを一括削除する方法

MySQLテーブルから複数のエントリ(行)をまとめて削除したい場合、JOINを活用すると効率的です。この記事では、実際のSQL実行例とともに、テーブルの作成から削除後の確認までの手順をわかりやすく解説します。

1. サンプルテーブルの作成

まず、デモ用のテーブルを作成します。

mysql> create table DemoTable(Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName varchar(100));
Query OK, 0 rows affected (0.69 sec)

2. レコードの挿入

次に、INSERTコマンドを使ってテーブルにデータを登録します。ここでは、あえて「Bob」「Adam」「Mike」といった重複する名前を含めています。

mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(FirstName) values('Bob');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable(FirstName) values('Adam');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable(FirstName) values('Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(FirstName) values('Adam');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.23 sec)

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

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

mysql> select *from DemoTable;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | Bob       |
|  3 | Mike      |
|  4 | Adam      |
|  5 | Bob       |
|  6 | Adam      |
|  7 | Bob       |
|  8 | Mike      |
+----+-----------+
8 rows in set (0.00 sec)

4. JOINを使って複数のエントリを削除する

ここからが本題です。以下のクエリを実行すると、条件に一致する複数のレコードを一度に削除できます。

mysql> delete DemoTable
    from DemoTable
       join DemoTable tbl on DemoTable.FirstName = tbl.FirstName
       where tbl.FirstName = 'Bob';
Query OK, 3 rows affected (0.15 sec)

「Query OK, 3 rows affected」と表示されているように、名前が「Bob」のレコード3件がまとめて削除されました。ポイントは、DELETE文で対象テーブルを明示しつつ、同一テーブルとの自己結合(セルフJOIN)を行い、WHERE句で削除条件を指定している点です。

5. 削除後のレコードを確認する

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

mysql> select *from DemoTable;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  3 | Mike      |
|  4 | Adam      |
|  6 | Adam      |
|  8 | Mike      |
+----+-----------+
5 rows in set (0.00 sec)

「Bob」のレコードだけがきれいに取り除かれ、残り5件が残っていることがわかります。

まとめ

MySQLでは、DELETE文とJOINを組み合わせることで、特定の条件に一致する複数のレコードを一括して削除できます。自己結合を利用すれば、単純なWHERE句だけでは表現しにくい柔軟な削除条件も指定可能です。重複データの整理や大量レコードの一括クリーンアップなど、実務でも役立つテクニックなので、ぜひ活用してみてください。

  1. MySQLで条件に基づいてテーブルから一部の行のみを削除する方法

    MySQLで条件に基づいてテーブルから一部の行のみを削除する方法MySQLでは、DELETE文とWHERE句を組み合わせることで、テーブルから条件に合致する行だけを選択的に削除できます。WHERE句を指定しないとテーブル内のすべての行が削除されてしまうため、条件の指定は非常に重要です。ここでは、実際の例を使って手順を解説します。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query O

  2. MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法

    MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)