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

MySQLで複数テーブルのレコードを削除する方法(DELETE文の使い方)

MySQLでは、DELETE文を使用して、条件に一致するレコードをテーブルから削除できます。本記事では、2つのサンプルテーブルを作成し、それぞれから特定のデータを削除する手順を順番に解説します。

サンプルテーブル(DemoTable1)の作成

まず、最初のテーブルを作成しましょう。

mysql> create table DemoTable1
(
    Id int,
    Name varchar(20)
);
Query OK, 0 rows affected (0.63 sec)

レコードの挿入

INSERTコマンドを使って、テーブルにいくつかのレコードを追加します。

mysql> insert into DemoTable1 values(1,'Chris');
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable1 values(2,'David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1 values(3,'Bob');
Query OK, 1 row affected (0.20 sec)

レコードの確認

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

mysql> select *from DemoTable1;

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

+------+-------+
| Id   | Name  |
+------+-------+
|     1 | Chris |
|     2 | David |
|     3 | Bob   |
+------+-------+
3 rows in set (0.00 sec)

サンプルテーブル(DemoTable2)の作成

続いて、2つ目のテーブルを作成します。

mysql> create table DemoTable2
(
    ClientId int,
    ClientName varchar(20)
);
Query OK, 0 rows affected (1.19 sec)

レコードの挿入

mysql> insert into DemoTable2 values(101,'Mike');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable2 values(110,'Bob');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable2 values(120,'Adam');
Query OK, 1 row affected (0.60 sec)

レコードの確認

mysql> select *from DemoTable2;

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

+----------+------------+
| ClientId | ClientName |
+----------+------------+
|       101 | Mike       |
|       110 | Bob        |
|       120 | Adam       |
+----------+------------+
3 rows in set (0.00 sec)

マルチテーブル削除の実行

それでは、両方のテーブルから「Bob」という名前のレコードを削除します。ここでは、各テーブルに対してDELETE文を実行します。

mysql> delete from DemoTable1 where Name='Bob';
Query OK, 1 row affected (0.23 sec)
mysql> delete from DemoTable2 where ClientName='Bob';
Query OK, 1 row affected (0.27 sec)

なお、MySQLにはJOINを利用したマルチテーブルDELETE構文も用意されており、1つのDELETE文で複数のテーブルから同時にレコードを削除することも可能です。

mysql> DELETE DemoTable1, DemoTable2
    -> FROM DemoTable1
    -> JOIN DemoTable2 ON DemoTable1.Name = DemoTable2.ClientName
    -> WHERE DemoTable1.Name = 'Bob';

削除結果の確認(DemoTable1)

mysql> select *from DemoTable1;

実行結果は以下のとおりです。「Bob」のレコードが削除されていることがわかります。

+------+-------+
| Id   | Name  |
+------+-------+
| 1     | Chris |
| 2     | David |
+------+-------+
2 rows in set (0.00 sec)

削除結果の確認(DemoTable2)

mysql> select *from DemoTable2;

実行結果は以下のとおりです。こちらも「Bob」のレコードが削除されています。

+----------+------------+
| ClientId | ClientName |
+----------+------------+
|      101 | Mike       |
|      120 | Adam       |
+----------+------------+
2 rows in set (0.00 sec)

まとめ

このように、DELETE文を使えば条件に一致したレコードを簡単に削除できます。複数のテーブルにまたがるデータを削除したい場合は、①各テーブルに対して個別にDELETE文を実行する方法と、②JOINを組み合わせたマルチテーブルDELETE構文を使う方法の2つがあります。状況や要件に応じて適切に使い分けるとよいでしょう。

  1. MySQLでORDER BY FIELD()を使ったカスタムソートを実行する方法

    MySQLでカスタムソートを行うにはMySQLで独自の順序に従ってレコードを並び替えたい場合、ORDER BY FIELD() を使用します。FIELD()関数は、指定した値のリストの順番に基づいて各レコードの位置を返すため、任意の順序でのソートが可能になります。まず、テーブルを作成しましょう。mysql> create table DemoTable    -> (    -> Id int    -> ); Query OK, 0 rows affected (0.82 sec)サンプルデータの挿入INSE

  2. MySQLでサブクエリのSELECT結果をもとにDELETEを実行する方法

    はじめにMySQLでは、DELETE文のWHERE句で削除対象と同じテーブルを直接サブクエリとして参照すると、「ERROR 1093: You cant specify target table for update in FROM clause」というエラーが発生します。この問題を回避するには、サブクエリ全体を別のサブクエリ(派生テーブル)でラップする方法が有効です。本記事では、実際の手順を例とともに解説します。テーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1947    ( &nb