MySQL - 如何删除重复的数据输入?
Posted
技术标签:
【中文标题】MySQL - 如何删除重复的数据输入?【英文标题】:MySQL - How to remove duplicate data entry? 【发布时间】:2020-07-08 10:13:02 【问题描述】:我有以下类型的数据
id product_id url
10 300 /300/abc
9 300 /300/abc/def
8 200 /200/bcd
7 200 /200/bcd/efg
6 100 /100/cde
5 100 /100/cde/hif
每一行product_id第二个值是正确的意思是,id 9,7,5都是正确的。
SELECT product_id, COUNT(*) count FROM demo_table GROUP BY product_id HAVING count > 1;
上面的查询会给我有重复值的结果。
如何通过 mysql 查询删除其余记录?
【问题讨论】:
每个 id 是否只有 2 个或多个重复项? 嗨@forpas 每个 id 有 2 个重复项。只有是的 有什么逻辑吗?如果没有,为什么不简单地使用不是 5、7、9 的 ID 运行DELETE
查询?
【参考方案1】:
在DELETE
语句中使用自我join
:
DELETE d1
FROM demo_table d1 INNER JOIN demo_table d2
ON d2.product_id = d1.product_id AND d2.id < d1.id;
请参阅demo。 结果:
| id | product_id | url |
| --- | ---------- | ------------ |
| 9 | 300 | /300/abc/def |
| 7 | 200 | /200/bcd/efg |
| 5 | 100 | /100/cde/hif |
【讨论】:
只是一个问题,如果product_id
列类似于字符串 `/product_id/300' 那么也可以工作,或者我们需要为此采取不同的方法?
像d2.product_id = d1.product_id
这样的条件可以应用于数字和字符串。
我的意思是将 AND d2.id < d1.id
更改为 AND d2.url > d1.url
更好地删除具有短 url 的记录
@SlavaRozhnev 检查这个:db-fiddle.com/f/2toyAVMacPkdwSFaDJHeCS/1
@forpas,是的。这是更好的解决方案,基于 url 长度以上是关于MySQL - 如何删除重复的数据输入?的主要内容,如果未能解决你的问题,请参考以下文章