※以前別の場所で書いた文章を備忘的に書き記しておきます。
MySQLでデータベース操作をしていると、間違って同一データを複数回データベースに挿入してしまうことがあります。すなわち重複レコードの発生です。
そのような時は「SELECT DISTINCT」を使ってデータを取り出せばいいのですが、たまに重複レコードを削除して取り出せないケースも出てきます。また、データ(レコード数)が多くなってくると、重複したレコードをデータベースから一括して削除したくなります。
先ほどSQL文を作成して重複レコードをテーブルから一括削除したのですが、今後使うこともありそうなので備忘的にサンプルソースを残しておきます。
次のようなテーブル「main_table」があるとします。「2006-01」「イヌ」が3つ、「2006-02」「ネコ」が2つ重複しています。
●テーブル「main_table」(※SQL実行前)
field_1
|
field_2
|
field_3
|
field_4
|
2006-01
|
イヌ
|
15
|
6
|
2006-01
|
イヌ
|
15
|
6
|
2006-01
|
イヌ
|
15
|
6
|
2006-02
|
ネコ
|
5
|
26
|
2006-02
|
ネコ
|
5
|
26
|
2006-02
|
イヌ
|
23
|
12
|
まず、一時的にテーブル「temp_table」を作成します。テーブル「main_table」をコピーするのですが、ポイントは重複に関係するフィールドでグループ化することです。
下記ソースは、フィールド「field_1」とフィールド「field_2」でグループ化した例です。
//●ソース1
mysql_query("CREATE TABLE temp_table as SELECT * FROM main_table GROUP BY field_1, field_2");
phpMyAdmin等で、テーブル「temp_table」から重複レコードが削除されていることを確認後に、下記SQL文を実行します。
//●ソース2
mysql_query("DROP TABLE main_table");
mysql_query("ALTER TABLE temp_table RENAME TO main_table");
すると、テーブル「main_table」は下記のようになると思います。
●テーブル「main_table」(※SQL実行後)
field_1
|
field_2
|
field_3
|
field_4
|
2006-01
|
イヌ
|
15
|
6
|
2006-02
|
ネコ
|
5
|
26
|
2006-02
|
イヌ
|
23
|
12
|
テーブル「main_table」を一度削除することになるので、テーブル「temp_table」の確認作業はしっかり行ってください。(くれぐれも自己責任でお願いします)