【问题标题】:MySQL - How to remove duplicate data entry?MySQL - 如何删除重复的数据输入?
【发布时间】: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 查询?

标签: mysql duplicates


【解决方案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 长度
猜你喜欢
  • 2011-01-09
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
相关资源
最近更新 更多