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句を併用することも検討してください。
-
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コマンドを使ってテ
-
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コマンドを