从mysql中的多行中删除重复数据?

时间:2012-03-22 17:46:12

标签: mysql duplicate-removal delete-row corresponding-records

我是一名网络开发人员,因此缺乏操纵海量数据的知识。

同事正在寻找解决我们数据问题的方法。我们有一个大约400k行的表,列出了公司名称。

设计这个的人并没有意识到公司需要某种独特的标识符,所以公司名称有重复的条目。

根据公司名称使用什么方法来匹配所有这些记录,并根据某种标准删除重复记录(另一栏)

我正在考虑编写一个脚本来在php中执行此操作,但我真的很难相信我的脚本能够在执行这么多行之间的比较时执行。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我过去这样做的方法是编写一个只返回我想要的集合的查询(通常使用DISTINCT +子查询来确定基于其他值的正确记录),并将其插入到不同的表中。然后,您可以删除旧表并将新表重命名为旧名称。

答案 1 :(得分:0)

要查找表格中包含重复项的公司列表,您可以使用以下脚本:

SELECT NAME
FROM companies
GROUP BY NAME
HAVING COUNT(*) > 1

以下将删除除col列

中包含最大值的所有重复项
DELETE del
FROM companies AS del
INNER JOIN (
    SELECT NAME, MAX(col) AS col
    FROM companies
    GROUP BY NAME
    HAVING COUNT(*) > 1
) AS sub
    ON del.NAME = sub.NAME AND del.col <> sub.col

答案 2 :(得分:0)

答案: Answer origin

  

1)从table1删除

     

2)使用table1,table1作为vtable

     

3)WHERE(不是table1.ID&gt; vtable.ID)

     

4)AND(table1.field_name = vtable.field_name)

     
      
  1. 在这里告诉mysql有一个table1。
  2.   
  3. 然后你告诉它你将使用table1和一个值为table1的虚拟表。
  4.   
  5. 这会让mysql不能将记录与自身进行比较!
  6.   
  7. 在此告诉它不应该有相同field_name的记录。
  8.