2

重複の可能性:
SQL で重複行を削除するには?

同じ名前と年に関してテーブルから重複した行を返すこのクエリがあります。

重複レコードを削除して、テーブルに一意の値のみが存在するようにするにはどうすればよいですか?

クエリは次のとおりです。

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
4

2 に答える 2

2

DELETE ステートメントでは、サブクエリを使用して、削除するアイテムをフィルター処理できます。

これを読んで

http://www.w3resource.com/sql/delete-statement/delete-with-subqueries.php

于 2012-11-28T18:42:34.287 に答える
2

このクエリは、すべての重複を示しています。

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)
于 2012-11-28T19:31:38.523 に答える