在条件中删除MySQL中的重复行

时间:2019-05-06 09:57:38

标签: mysql

我在mysql数据库中有一个名为“ Movies”的表,它具有同一电影的多个记录。标识符是“ APN”字段。

我试图删除所有多行,但保留一条记录,其中包含更完整的信息。

例如,在下面的记录中,我想删除前两行,但保留第三行,因为它具有更完整的信息,包括预告片网址。

+----+----------+---------+--------+-----------+
Id    APN        Title     Genre    Trailer
+----+----------+---------+--------+------------+
1     1234567    TinTin    NULL      NULL
2     1234567    TinTin    Fiction   NULL
3     1234567    TinTin    Fiction   http://youtube.xyz
+---------------------------------------------------

如果我使用以下查询,它将只删除具有较低ID的重复项。

DELETE m1 FROM movies m1
INNER JOIN movies m2 
WHERE m1.id < m2.id AND m1.apn = m2.apn;

如果某些列为空,我可以在查询中使用where子句并说删除重复行吗?

3 个答案:

答案 0 :(得分:2)

尽管您的查询工作得很好,但是您可以在下面尝试-

DEMO

DELETE m1 FROM t1 m1
where id not in ( select * from 
                    ( select max(id) from t1 where Trailer is not null group by apn
                    ) A

                )

答案 1 :(得分:1)

我将采用另一种方法,并通过以下查询选择数据最完整的那些记录:

select 
max(id), max(apn), max(title), max(genre), max(trailer)
from movies

这将为您提供最完整的答案。

希望这会有所帮助:)

答案 2 :(得分:1)

您还可以使用查询:

DELETE m1 FROM movies m1
INNER JOIN movies m2 
ON m1.apn = m2.apn
WHERE m1.id != m2.id AND (m1.Trailer IS NULL OR m1.Genre IS NULL OR m1.Title IS NULL)

它将删除没有预告片,流派或标题的行。