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 &lt; d1.id 更改为 AND d2.url &gt; d1.url 更好地删除具有短 url 的记录 @SlavaRozhnev 检查这个:db-fiddle.com/f/2toyAVMacPkdwSFaDJHeCS/1 @forpas,是的。这是更好的解决方案,基于 url 长度

以上是关于MySQL - 如何删除重复的数据输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cte删除mysql中的重复数据

mysql如何删除重复数据并保留ID最大的数据

mysql怎么去除重复数据

如何删除 MySQL 表中的重复项

Oracle中如何删除重复数据

mysql 如何去除表连接查询出来的重复数据