コメントに記載されているように、アイテムが複数回重複している場合は、SaharshShahの回答のクエリを複数回実行する必要があります。
これは、データを削除せず、データを常に元のテーブルに保持し、テーブルを「ライブ」に保ちながら重複を削除できるようにするソリューションです。
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