5

多くの重複があるかなり大きな MySQL データベースを受け取りました。データベースの約 3 分の 1 が重複しています。また、主キーもありません。

データベースの構造は次のとおりです。

unique_id | field01 | field02 | field03 | field04 | ...... | field26 | field27 |

ここで、unique_id は一意であると想定されていますが、まあ、一意です。重複が多い。

また、特定の unique_id のコピーに属する行のセットの場合、残りの列は同じである場合と異なる場合があります。たとえば、以下の unique_id 'id_1' を見ると、field01 は両方のインスタンスで同じですが、field02 と field03 は異なります。

繰り返しを削除して、各 unique_id のコピーを 1 つだけ残したいと思います。どちらが生き残るかは問題ではありません。

例:

id_1 | abc  | dfd  | NULL | ... | def | 
id_2 | abc  | daf  | ghi  | ... | 12a |
id_1 | abc  | xyz  | jkl  | ... | def |
id_4 | aaa  | bbb  | NULL | ... | def |
id_3 | NULL | bbb  | NULL | ... | 123 |
id_5 | 1e3  | NULL | NULL | ... | def |
id_3 | aaa  | bbb  | fds  | ... | def |
id_9 | awa  | bbb  | NULL | ... | 910 |

次のようになる必要があります。

id_1 | abc  | dfd  | NULL | ... | def | 
id_2 | abc  | daf  | ghi  | ... | 12a |
id_4 | aaa  | bbb  | NULL | ... | def |
id_3 | NULL | bbb  | NULL | ... | 123 |
id_5 | 1e3  | NULL | NULL | ... | def |
id_9 | awa  | bbb  | NULL | ... | 910 |

または、これも問題ありません。

id_2 | abc  | daf  | ghi  | ... | 12a |
id_1 | abc  | xyz  | jkl  | ... | def |
id_4 | aaa  | bbb  | NULL | ... | def |
id_5 | 1e3  | NULL | NULL | ... | def |
id_3 | aaa  | bbb  | fds  | ... | def |
id_9 | awa  | bbb  | NULL | ... | 910 |

これが完了したら、unique_is を主キーとして設定する必要があります。

これを行うための最善かつ正確な方法をアドバイスしてください。前もって感謝します。

4

3 に答える 3

2

すべてのエラーを無視して、テーブルに一意のインデックスを追加し、MySqlに重複するすべての行(1つを除く)を削除させることができます。

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX dupidx (unique_id)

ただし、IGNORE句を使用してもエラーが発生する場合は、次のことを試してください。

ALTER TABLE your_table ENGINE MyISAM;
ALTER TABLE IGNORE your_table ADD UNIQUE INDEX dupidx (unique_id);
ALTER TABLE your_table ENGINE InnoDB;

複製されたIDごとに1行だけを保持してデータを表示することに関心がある場合は、次のように使用できます。

SELECT *
FROM your_table
GROUP BY unique_id
于 2012-12-10T08:59:04.123 に答える
1

私はその問題を抱えていましたが、これは私にとってはうまくいきました:

CREATE TABLE newtable SELECT * FROM oldtable GROUP BY unique_id;

次に、古いテーブルを削除し、新しいテーブルの名前を古いテーブル名に変更します

于 2014-10-30T15:18:12.817 に答える
0

これを試して :

select unique_id, field01 , field02 , field03 from (table_name) group by unique_id having sum(unique_id)<1
于 2012-12-10T09:32:00.240 に答える