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

MySQLで重複レコードを含むテーブルから特定の値を1件だけ削除する方法

MySQLでテーブル内のレコードを削除するにはDELETE文を使用します。しかし、同じ値の重複レコードが複数存在する場合に、そのうち1件だけを削除したいケースがあります。そんなときは、LIMIT句を組み合わせることで、削除対象の件数を制限できます。

基本構文

delete from yourTableName where yourColumnName=yourValue limit 1;

この構文では、WHERE句で削除対象の条件を指定し、LIMIT 1によって該当するレコードのうち最初の1件のみを削除します。

実際にテーブルを作成して確認してみよう

まず、サンプル用のテーブルを作成します。

mysql> create table DemoTable
   -> (
   -> Amount int
   -> );
Query OK, 0 rows affected (1.38 sec)

次に、INSERTコマンドを使っていくつかのレコードを挿入します。意図的に「50」という値を3回挿入し、重複データを作ります。

mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.36 sec)
mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.59 sec)
mysql> insert into DemoTable values(70);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.23 sec)

SELECT文でテーブル内の全レコードを表示して確認しましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。「50」が3件登録されていることがわかります。

+--------+
| Amount |
+--------+
|     50 |
|    100 |
|     50 |
|     70 |
|     90 |
|     50 |
+--------+
6 rows in set (0.00 sec)

重複レコードから1件だけ削除するクエリ

ここで、「50」という値を持つレコードのうち1件だけを削除するクエリを実行します。

mysql> delete from DemoTable where Amount=50 limit 1;
Query OK, 1 row affected (0.39 sec)

「Query OK, 1 row affected」と表示されているように、削除されたのは1行だけです。LIMIT句がない場合、条件に一致する3件すべてが削除されてしまうため注意が必要です。

削除後のテーブルを確認

もう一度SELECT文を実行して、テーブルの状態を確認してみましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。元々3件あった「50」が2件になり、1件だけが正しく削除されました。

+--------+
| Amount |
+--------+
|    100 |
|     50 |
|     70 |
|     90 |
|     50 |
+--------+
5 rows in set (0.00 sec)

まとめ

重複レコードが存在するテーブルから特定の値を1件だけ削除したい場合は、DELETE文にWHERE句LIMIT 1を組み合わせるのが最もシンプルな方法です。LIMIT句を使うことで、条件に一致する複数のレコードの中から最初の1件のみを安全に削除できます。なお、どのレコードが先に削除されるかは保証されていないため、特定の行を優先的に削除したい場合はORDER BY句を併用することも検討してください。

  1. MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方

    MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ

  2. MySQLで重複行を除外して1行だけ取得する方法(DISTINCTの使い方)

    MySQLで重複行から1行のみを返すには?MySQLのテーブルに同じ値を持つ重複行が存在する場合、DISTINCTキーワードを使うことで、重複を排除した一意な行だけを取得できます。この記事では、実際にテーブルを作成し、データを挿入したうえで、DISTINCTによる重複除去の手順を解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1998 ( Name varchar(20) ); Query OK, 0 rows affected (0.61 sec)2. レコードを挿入するINSERTコマンドを