sql - 有没有一种干净的方法来清理 MySQL 中的重复条目?

标签 sql mysql dirty-data

在表中,我有三列 - id、name 和 count。许多名称列是相同的(由于早期缺乏 UNIQUE),我想解决这个问题。但是,id 列被其他(4 或 5 个,我认为 - 我必须检查文档)表使用来查找名称,仅仅删除它们就会破坏事情。那么有没有一种好的、干净的方式来表达“找到所有相同的记录并将它们合并在一起”?

最佳答案

这种问题时不时就会出现。不,没有一种真正干净的方法可以做到这一点。您必须先更改子表中依赖于父表中不需要的值的所有行,然后才能消除父表中不需要的行。

MySQL 支持多表 UPDATEDELETE 语句(与其他品牌的数据库不同),因此您可以执行一些非常巧妙的技巧,如下所示:

UPDATE names n1
  JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name)
  JOIN child_table c ON (n2.id = c.id)
SET c.name_id = n1.id
ORDER BY n1.id DESC;

对所有子表执行此操作后,您可以使用 MySQL 的多表 DELETE 语法删除父表中不需要的行:

DELETE FROM n2
  USING names n1 JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name);

关于sql - 有没有一种干净的方法来清理 MySQL 中的重复条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/254295/

相关文章:

mysql - 带加密的存储过程始终返回 null

mysql - 在 SQL 中搜索 varchar 中特定位置的特定字母

mysql - Magento 向左连接

caching - 'dirty-flag'/'dirty-values' 是什么意思?

vb.net - 检查表单中的选择/文本是否已更改

SQL 按问题分组

MySQL - 长文本字段的词频计数

mysql - Snow Leopard下的Macports mysql5设置

mysql - 如何优化这个非常慢的 MySQL 查询?