コメントに記載されているように、アイテムが複数回複製される場合、Saharsh Shahの回答は複数回実行する必要があります。
ここで任意のデータを削除しない解決策だし、全体の時間元のテーブルにデータを保持し、「ライブ」テーブルを維持しながら、重複が削除されるのを許可する:
alter table tableA add column duplicate tinyint(1) not null default '0';
update tableA set
duplicate=if(@member_id=member_id
and @quiz_num=quiz_num
and @question_num=question_num
and @answer_num=answer_num,1,0),
member_id=(@member_id:=member_id),
quiz_num=(@quiz_num:=quiz_num),
question_num=(@question_num:=question_num),
answer_num=(@answer_num:=answer_num)
order by member_id, quiz_num, question_num, answer_num;
delete from tableA where duplicate=1;
alter table tableA drop column duplicate;
この基本的には、現在の行が最後の行と同じかどうかを確認し、一致する場合は重複としてマークします(orderステートメントは、重複が互いの隣に表示されることを保証します)。次に、重複レコードを削除します。最後にduplicate
列を削除して元の状態に戻します。それはalter table ignore
のように見える
もすぐに離れて行くかもしれない:http://dev.mysql.com/worklog/task/?id=7395
重複が削除された後に単純なドロップテーブルステートメントで削除できる一時的なテーブルを作成しない理由はありますか?一意のレコードのみを持つ一時テーブルを作成したり、元のテーブルからレコードを削除したり、一意のデータをロードしたり、一時テーブルを削除したりするSQLを提供できます。それが大規模なデータベースではない場合、これはあまり長くかかりません。このプロセスに関する良い記事は次のとおりです。http://www.databasejournal.com/features/mysql/article.php/10897_2201621_2/Deleting-Duplicate-Rows-in-a-MySQL-Database.htm – Kyle
[How to mysqlデータベースの重複レコードを削除しますか?](http://stackoverflow.com/questions/659906/how-to-delete-duplicate-records-in-mysql-database) –
私は簡単に解決策を探しています最も広い意味合い)を即座に繰り返すことができます。余分なテーブル、tempまたはnotを使用することは、これが検出されるといつでもサイトを停止させることを意味します。最高の解決策は、それが最初に起こることはないことを確認することですが、それまでは、このチェック/修正を定期的に実行してレポートが不安定な結果を出さないようにします。 – MivaScott