2012-02-18 13 views
0

これを行う方法があるのだろうかと疑問に思っています。mySQLが二重引用符を見つけて削除する

10kレコードで作業するためのダミーデータを最初にDBに取り込んだときに、すべてのスクリプトが行が重複している1,044行を余分にダンプしたようです。私は決定し、この使用

SELECT x.ID, x.firstname FROM info x 
INNER JOIN (SELECT ID FROM info 
GROUP BY ID HAVING count(id) > 1) d ON x.ID = d.ID 

私は何を把握しようとしていますが、私が見つけマッチングの1各デュープからdupesを削除しますそれへの別の部分を追加することができ、この単一のクエリを通じてのですか?

も私は、ID列が自動インクリメントに設定されている必要があります実現、それが最も効率的な方法は、あなたが以下の手順でそれを行うです

+2

[mysqlテーブルの重複を削除するにはどうすればいいですか?](http://stackoverflow.com/questions/2630440/how-to-delete-duplicates-on-mysql-table) – Vache

+0

[MySQL remove大規模なデータベースから重複することはありません](http://stackoverflow.com/questions/1651999/mysql-remove-duplicates-from-big-database-quick) –

+0

あなたはペアの両方を削除しないように非常に注意したいと思うでしょう。 dupsについて他に何か別のものがありますか? auto_incrementカラムのように、それらを分離するために使用できる独自のフィールドはありますか? – Umbrella

答えて

4

の名前にNEW_TABLEの名前を変更します。

ALTER IGNORE TABLE info ADD UNIQUE (ID); 

さらにビットを説明するために(参考までに、見てくださいhere

UNIQUE - ID列にユニークなインデックスを追加しています。

IGNORE - 標準SQLのMySQL拡張です。新しいテーブルの一意キーに重複がある場合、または厳密モードが有効な場合に警告が発生した場合のALTER TABLEの動作を制御します。 IGNOREが指定されていない場合、重複キーエラーが発生した場合、コピーは中止され、ロールバックされます。 IGNOREを指定した場合は、一意のキーに重複する行の最初の行のみが使用されます。他の競合する行は削除されます。不正確な値は、最も適合する許容値に切り捨てられます。私が使用

+0

これは少し詳しく説明できますか、最終的には削除したり、 – chris

+0

私は簡単な説明で答えを更新しました。 –

0

ませんでした:

ステップ1:移動します一時テーブル

CREATE TABLE new_table as 
SELECT * FROM old_table WHERE 1 GROUP BY [column to remove duplicates by]; 

ステップ2への非重複(ユニークタプル):は、すべての重複したエントリを持つテーブルを必要とする、もはや古いtable.Weを削除して削除しませんだから落とす!

DROP TABLE old_table; 

ステップ3:重複を除去する私のお気に入りの方法は次のようになりOLD_TABLE

RENAME TABLE new_table TO old_table; 
0

クエリは、一般的に

Delete from table where id in (
    Select Max(id) from table 
    Group by (DUPFIELD) 
    Having count (*)>1) 

あなたはそれがすべて一度に一つの重複行を削除するので、これを数回実行する必要があるようなものであるが、それは高速です。

関連する問題