0

我有一个情况,我的 MySQL 表(公司)包含重复的记录,即它有重复的公司,有些记录在大多数列中都有值,有些则没有。因此,我想删除具有最少信息集的重复公司。各位有什么想法吗?

Id Company_name column column2 column3 column4    
-------------------------------------------------
1  A                   xyz 
2  B            pqr    abc      tcv    aaa 
3  A            bnm    xyz      ccc     
4  A            bnm    xyz         
5  B                                   aaa 

我需要得到我的表如下

Id Company_name column column2 column3 column4    
-------------------------------------------------    
2  B            pqr    abc      tcv    aaa 
3  A            bnm    xyz      ccc     
4

2 回答 2

2

您可以使用 php 方法来完成这项工作,然后手动检索所有按列分组的记录,以减少重复行。在上述情况下,您正在考虑Company_name列。但是有可能它在其他列上可能有一些不同的值,但在 Company_name 列中没有。这可能会在理解算法将如何处理这种类型的行时产生歧义。
但是,在插入值之前,必须检查信息以防止重复发生,这将是一个很好的做法。但是如果您已经拥有此类记录,则以下查询可能会有所帮助。

DELETE FROM TABLENAME WHERE (Company_name, column) 
NOT IN 
(
  SELECT  Company_name, column FROM 
  (
    SELECT MIN(Id) AS Id, column FROM TABLENAME GROUP BY Company_name
  ) 
  X
);

这是为了删除一列的重复值,您可以结合多个查询来减少重复值。

于 2013-09-30T04:24:01.493 回答
1

可以获得每一行的“分数”并以此为基础做出决定。这是一个快速示例,显示了从哪里开始。

SELECT id, 
       name,  
       length(concat_ws('', col1, col2, col3, col4)) AS score 
  FROM company
 ORDER BY score DESC;

sqlfiddle上查看

于 2013-09-30T04:15:52.703 回答