mysql - 使用条件删除 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 子句并说删除重复行吗?
解决方案
尽管您的查询在小提琴中运行良好,但您可以在下面尝试 -
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
)
推荐阅读
- php - Laravel:为什么 Eloquent 显示隐藏字段?
- cypress - 从页面中获取文本,然后根据 API 调用对其进行验证
- teradata - 从 teradata 导出的 sql 文件开始时添加的垃圾值
- numpy - 使用 numpy 在二维数组中查找模式
- postgresql - 将本地 docker 卷挂载到 kubernetes pod
- mysql - 返回mysql中常见的结果
- r - 如何更改R中的线宽和颜色?并添加标题?
- sapui5 - UI5:getRouter().getTargets().display() 会破坏原始/源视图吗?
- python - LSTM 和 DEAP:输入 0 与层顺序不兼容:预期形状=(None, None, 6), found shape=(None, 36, 1)
- c++ - 为什么指向 __func__ 的指针不能是模板参数?