このクエリは、すべての重複を示しています。
SELECT movie_name, year
FROM movies
GROUP BY movie_name,year
HAVING count(movie_id) > 1
そして、これはすべての映画(複製されているかどうかにかかわらず)のmovie_idだけを示しています。これらは保持する行です:
SELECT movie_name, year, min(movie_id) min_movie_id
FROM movies
GROUP BY movie_name,year
重複を削除するには、これを使用できます:
DELETE movies
FROM
movies inner join
(SELECT movie_name, year, min(movie_id) min_movie_id
FROM movies
GROUP BY movie_name,year) keep
on movies.movie_name = keep.movie_name
and movies.year=keep.year
and movies.movie_id<>keep.min_movie_id
または、次のクエリを使用することもできます。
delete from movies
where
(movie_name, year, movie_id) not in
(select movie_name, year, min_movie_id from
(SELECT movie_name, year, min(movie_id) min_movie_id
FROM movies
GROUP BY movie_name,year) keep)