mysql - MySQL删除具有相同列值的重复行
问题描述
我正在清理一些数据,我想通过查找具有相同“图片 id”和“日期”值的记录来删除重复的行:
例子:
picture_id - 2 date - "13-Jul-18"
picture_id - 2 date - "13-Jul-18"
picture_id - 2 date - "13-Jul-18"
picture_id - 2 date - "13-Jul-18"
DELETE FROM `pictures` WHERE `picture_id` = '2' AND `date` = '13-Jul-18'
表列(按顺序):ID(主键)、picture_id、日期、关注者
我只想删除除一条重复记录之外的所有重复记录。不管是哪一个。我怎样才能做到这一点?
解决方案
在 MySQL 中,您可以使用以下方法保留最小(或最大)的 id JOIN
:
DELETE p
FROM pictures p JOIN
(SELECT p.picture_id, p.date, MIN(id) as min_id
FROM pictures p
WHERE p.picture_id = 2 AND p.date = '2018-07-13'
GROUP BY p.picture_id
) pp
ON p.picture_id = pp.picture_id AND p.date = pp.date AND p.id > p.min_id;
推荐阅读
- java - 服务类应该是类图的一部分吗?
- java - 不正确的乘法
- java - OneToMany 只返回特定的行
- node.js - 使用 npm run build:prod 构建 Angular 应用程序后无法运行 npm run server
- flutter - 为什么boxShadow可以改变容器的背景颜色?
- ruby-on-rails - Ruby on Rails 活动存储验证
- jenkins - jenkins how to use ssh-agent in docker
- javascript - 为什么我们在 nodejs 中使用 async/await 如果它已经是异步的,而在 javascript 中也是如此?
- autodesk-forge - 将 Autodesk Forge 应用程序转移给其他用户
- javascript - Chosen jquery plugin - 获取多选的选定文本/标签(不是值)