MySQL:从 MySQL TABLE 中删除重复行的最安全方法是啥?

Posted

技术标签:

【中文标题】MySQL:从 MySQL TABLE 中删除重复行的最安全方法是啥?【英文标题】:MySQL: What is the safest way to remove duplicate rows from a MySQL TABLE?MySQL:从 MySQL TABLE 中删除重复行的最安全方法是什么? 【发布时间】:2013-05-06 09:08:42 【问题描述】:

我有一个 mysql 表。它包含我们从数据馈送中获得的邮寄地址。但是邮寄地址没有客户记录,所以我没有一种简单的方法来匹配客户记录作为键来查看它是否已经存在于主表中。所以我决定将新的每日数据馈送添加到主表中,然后删除重复项。

删除重复项最安全的方法是什么?显然,我想忽略 ID 列字段。但是我如何为以下字段执行此操作:

company_name
contact_name
address1
address2
address3
city
state
zipcode
phone_number
email_address

如果我重建 MySQL TABLE 以包含 ALTER TABLE with UNIQUE KEY,那会安全吗?例如:

ALTER TABLE people ADD UNIQUE KEY (company_name,contact_name,address1,address2,address3,city,state,zipcode,phone_number,email_address)

以上内容是否可以安全地防止重复记录被插入开始?

谢谢!

【问题讨论】:

你能提供更多的样本记录吗? 您是否定义了重复的含义? ***.com/questions/14816863/… 试试这个 可以使用SELECT DISTINCT语句 @bksiA duplicate 是包含我提到的字段/列的行,每个字段/列都包含完全相同的数据。 【参考方案1】:

这是您可以使用的最简单的查询 根据您的要求选择最大或最小。

DELETE
FROM MyTable
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM MyTable
GROUP BY DuplicateColumn1, DuplicateColumn2, DuplicateColumn3)

谢谢

【讨论】:

请查看我使用 ALTER TABLE people ADD UNIQUE KEY 添加的示例。我很想知道你的想法。谢谢!【参考方案2】:

从测试中删除一个 左连接 ( SELECT MIN(id) AS id、company_name、contact_name、address1、address2、address3、city、state、zipcode、phone_number、email_address 从测试 GROUP BY company_name、contact_name、address1、address2、address3、city、state、zipcode、phone_number、email_address ) b ON a.id = b.id AND a.company_name = b.company_name AND a.contact_name = b.contact_name AND a.address1 = b.address1 AND a.address2 = b.address2 AND a.address3 = b.address3 AND a.city = b.city AND a.state = b.state AND a.zipcode = b.zipcode AND a.phone_number = b.phone_number AND a.email_address = b.email_address 哪里 b.id 为空

【讨论】:

以上是关于MySQL:从 MySQL TABLE 中删除重复行的最安全方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 表中保留一个副本并删除其余的 [重复]

mysql数据表删除字段里重复的信息

mysql 重复插入主键不报错方法

mysql删除完全重复行,求教

Mysql删除重复记录,保留id最小的一条

Mysql 查询加入