首页 > 解决方案 > 使用条件删除 MySQL 中的重复行

问题描述

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

我正在尝试删除所有多行,但保留一条信息更完整的记录。

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

+----+----------+---------+--------+-----------+
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 子句并说删除重复行吗?

标签: mysql

解决方案


尽管您的查询在小提琴中运行良好,但您可以在下面尝试 -

演示

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

                )

推荐阅读