携帯 - コメント一覧 - 更新記録 - サイトマップ  

MA M&Aバンク » 開発者blog

icon HOME icon 会社案内 icon 冤罪を創る人々 icon 引かれ者の小唄 icon 経済事件ノート icon 山根治blog icon 開発者blog

重複レコードをSQLデータベースから一括削除 . はてなブックマーク  Twitter   2007-01-15

※以前別の場所で書いた文章を備忘的に書き記しておきます。

 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」の確認作業はしっかり行ってください。(くれぐれも自己責任でお願いします)

重複レコードをSQLデータベースから一括削除 (2007-01-15) . はてなブックマーク  Twitter  


関連するカテゴリー

前後のページ

このエントリーへのトラックバック

   [告知] ※トラックバックスパムが多いので、しばらくの間トラックバックの受付を停止いたします。(2006-08-08)


このエントリーへのコメント

[1752] Re1:重複レコードをSQLデータベースから一括削除
投稿者:ドラエモン 2010-01-01 12:07:34
参考になりました。
ありがとう!


Copyright©2004-2010 "M&A bank Co.,LTD". Powered by Nucleus CMS v3.41.