質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

4回答

6262閲覧

Mysql 重複している行を削除したい

K_T_T_K

総合スコア231

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1グッド

0クリップ

投稿2015/03/09 07:28

現在運営しているサービスのあるテーブルには、約100万行以上あります。
このテーブルから重複している行を削除したいのですが良い方法ありますでしょうか?

カラムにはid name homepage localityなどがあります。
重複していると検討するにはnameもしくはlocality、tellが同じものが存在するかです。

宜しくお願いします。

yodel👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

unipastaさんの回答に、さらに付け加えるなら、補助的な操作用テーブルを以下のようなDDLで用意するのがよいと思います。

CREATE TABLE tmp_delete (
id INT UNSIGNED NOT NULL
)ENGINE=InnoDB;
ALTER TABLE tmp_delete ADD FOREIGN KEY (id)
REFERENCES [source table name].id
ON UPDATE NO ACTION
ON DELETE CASCADE;

で、unipastaさんの回答にあったSQLで取得したIDだけをINSERT SELECT文あたりで流し込んでしまい、本当に削除してよいものであればDELETE文にWHERE句でスカラクエリを置いてしまうのが安全かと思います。その前に、事前にmysqldumpあたりでバックアップするのも有効ですね。

投稿2015/03/17 08:22

BetaNews

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

恐らく、3件同じデータがあったら、2件削除して1件だけ残したいという事だと思います。

havingなしのgroup byしたselect結果をソースとして新しいテーブルを作成し、テーブル名を置き換えてしまうのも手です。
ただ、削除されるid値が他のテーブルと関連している場合はもうひとひねりしないとだめですね。

サービスを止めたくない場合は、テーブル名操作をする間はデータベースをロックする必要がでてくるので、一連のSQLをあらかじめテキストファイルにまとめておいて、mysqlクライアントに一気に流し込むのが良いと思います。

投稿2015/03/15 02:31

terushu

総合スコア358

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いきなり消しちゃって大丈夫なんでしょうか。
例えば、重複したデータが3件あったら、2件削除ではなく
3件とも全て削除で良いのでしょうか。

group by を使えば重複したデータを特定できると思います。

↓nameが重複しているデータ
select * from tableA group by name having count(*) > 1

投稿2015/03/09 07:45

unipasta

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DELETE FROM [テーブル名] WHERE id NOT IN (SELECT min_id from (SELECT MIN(id) min_id FROM [テーブル名] GROUP BY name) tmp);

こちらを少し修正すれば使えませんかね?

投稿2016/04/09 16:02

shunshun

総合スコア89

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問