SELECT movies.movie_name, movies.year FROM movies
INNER JOIN (SELECT movie_name, year FROM movies
GROUP BY movie_name,year HAVING count(movie_id) > 1) dup ON movies.movie_name = dup.movie_name
and movies.year = dup.year
合理的なスタートと思われる...
1つを削除することで、1つを保持することを意味すると思います。複数の重複がある可能性があることを忘れないでください
最初のものを保持して残りを取り除き、最も古いmovie_idを持つものが最初であるとしましょう
そう
Select Min(Movie_id), Movie_Name, Year From Movies Group By Movie_Name, Year
保持するすべてのものをあなたに与えるでしょう
Select Movie_id,Movie_Name,Year From Movies m
Left Join
(Select Min(Movie_id), Movie_Name, Year From Movies Group By Movie_Name, Year) keep
On keep.movieid = m.movieid Where keep.Movie_Id is null
上記は、映画に含まれているが、保持したいすべてのクエリには含まれていないすべてのレコードです。
それで、あなたが取り除きたいと思うものはすべて私たちに与えられます. クトゥルフのために、これについて私やあなた自身を信用しないでください! 削除する前にバックアップを取ってください!
Delete m From Movies m
Left Join
(Select Min(Movie_id), Movie_Name, Year From Movies Group By Movie_Name, Year) keep
On keep.movieid = m.movieid Where keep.Movie_Id is null
これで、証明したクエリを取得し (証明したのはあなたではないことを証明しました!)、問題のあるレコードを選択する代わりに、それらを削除します。
バックアップをお忘れなく!