2011-05-01 8 views
1

私はmysqlテーブルを持っています。 3つの列に基づいて部分複製を削除するにはどうすればよいですか?現在のテーブルに変更を適用することは可能でしょうか?解決策は何ですか?部分的な重複をmysqlテーブルから削除するには?

例:
現在のテーブル
姓.........ファーストネーム.......会社名........責任....... Column5 McKain ............... Christine ......... XYZ ..................... .......... A ................................ A
McKain ... ....... .... Christine ......... XYZ ............................ .B ............................... B
Morrell ............. ..サリー.............. ABC .............................. A。 .............................. A
Motu ................ ..ティモシー............ EFG ............................. I ..... ................. ..........私

結果表:

姓.........ファーストネーム.......会社名...... ..応募資格....... Column5 McKain ............... Christine ......... XYZ ........... .................... A ............................. ... A
Morrell ............... Sally .............. ABC ............ .................. A ............................... A
Motu ..................ティモシー............ EFG ............... .............. I ................................ I

と可能であれば誰かがpリースは私にここでスタックオーバーフローでテーブルを追加する簡単な方法を教えて...

+0

部分的に重複していることの例を教えてください。 –

+1

3つの列の組み合わせが「部分的重複」を避けるためにユニークでなければならない場合は、それらの3つを一意のキーとして一緒に割り当てる必要があります(重複を取り除くと..)。 ... – CarpeNoctumDC

+0

私はそれが輸出、ソート、デ・ダップと再インポートを含むと思われます。 – staticsan

答えて

0

は、あなたのテーブルの名前とGROUP BY/UNIQUE INDEXフィールドあなたがユニークになりたいフィールドを持つtableNameのを交換してください。

警告:重複を削除するときに使用されるGROUP BYは、最初のエントリのみを選択します。

何か問題が生じた場合でも、元のデータのコピーはまだtableName_oldにあります。

-- Create a new table that's filtered 
CREATE TABLE newTable 
    (SELECT * 
    FROM tableName 
    GROUP BY LastName, FirstName, Company); 

-- Add a unique index of the fields you want 
ALTER TABLE newTable ADD UNIQUE INDEX ix_unique (LastName, FirstName, Company); 

-- Rename the tables around 
RENAME TABLE tableName TO tableName_old; 
RENAME TABLE newTable TO tableName; 
関連する問題