Mysql 使用两个条件查询内部联接?

Mysql 使用两个条件查询内部联接?,mysql,sql,Mysql,Sql,我有一个sql查询,它按名称选择在表中找到的重复项: 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 =

我有一个sql查询,它按名称选择在表中找到的重复项:

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
这似乎是一个合理的开始

删除一个我想你的意思是保留一个,别忘了你可以有多个副本

比如说,我们将保留第一个,去掉其余的,而拥有最早电影id的是第一个

所以

会给你所有要保留的

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
因此,现在我们接受了我们证明过的查询(您确实证明了它不是您!),而不是选择有问题的记录,我们正在删除它们


别忘了备份

我非常喜欢托尼使用
MIN
的想法。但是,整个查询可以更简单:

DELETE FROM movies WHERE movie_id NOT IN 
(SELECT MIN(movie_id) FROM movies GROUP BY movie_name, year);

我可以问你,比如我是否想从你的查询中删除一个重复的结果吗?我该怎么做呢,对不起,我是一个新手,在其他数据库管理系统上使用sqlProbaly只是从过去的糟糕日子开始的,但我倾向于避免不在查询中使用,并尝试加入。
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
DELETE FROM movies WHERE movie_id NOT IN 
(SELECT MIN(movie_id) FROM movies GROUP BY movie_name, year);