2011-05-11 29 views
2

私は巨大なテーブルを持っていますが、重複したエントリがたくさんあります。テーブルには10000件以上のエントリがあり、手動で検索して削除することなく、重複したエントリを削除したいと考えています。この解決方法を教えていただけたら教えてくださいDBの重複エントリ

+0

重複IDまたは特定のフィールドまたは...? –

+0

IDは一意ですか?彼らはあらゆる点で同じですか?彼らはどのようにして保管されましたか? – soandos

答えて

1

重複する行を削除する方法は異なりますが、重複する行を削除するにはさまざまな方法があります。最も簡単な方法は、製品名フィールドに一意のインデックスを作成するテーブルを変更することです:

alter ignore table products add unique index `unique_index` (product_name); 

あなたはすべての重複行が削除取得した後、インデックスを削除することができます

alter table products drop index `unique_index`; 

この場合は私に知らせてください問題を解決します。そうでない場合は、私はあなたにそのための代替ソリューションを提供することができます。

3

SELECT DISTINCT INTO TempTableを使用して、元のテーブルを削除し、次に名前を変更することができます。

また、この種の問題を避けるために、プライマリキーとユニークキーを追加する必要があります。

3

完全行の複製はこれを試してください。

select distinct * into mytable_tmp from mytable 
drop table mytable 
alter table mytable_tmp rename mytable 
2

あなたの要件を解決するのに役立つと思われます。テーブル(fooは)主キーフィールドに、一時テーブル内の

まずステップ

ストアのキーの値を持っている場合は、重複した電子メールIDを削除したい場合は

は、句 によってグループに独自の条件を与えますGROUP BY句に電子メールIDを与えるなど select句で主キーの名前を与えるのいずれか分(主キー)または最大値(主キー)

がuniquefields BY fooのグループからTEMPORARY TABLEのTEMPTABLE AS SELECT分(主キー)を作成します。

第二ステップ

コール以下の文を削除し、主キーはNOT IN(SELECT * FROM TEMPTABLE)WHERE fooという。DELETE FROM

テーブル名と主キーの列を与えます。

は、クエリアナライザまたはdbツールで両方のクエリを組み合わせて実行します。

テーブル(FOO)がフィールドまたはfileds BY FOOグループからSELECT * AS表TEMP_TABLEをCREATE

ステップ1

を提出し、主キーを持っていない場合。

ステップ2

fooから削除します。

ステップ3

INSERT INTO foo select * from temp_table;

1

グループに複数の列を追加できます。 I.

SELECT * from tableName GROUP BY prod_name HAVING count(prod_name) > 1 

これは、ユニークな製品を表示します。あなたはそれを新しいテーブルにダンプし、既存のテーブルを削除することができます。

関連する問題