如何删除具有最少信息集的重复行?

时间:2013-09-30 03:40:05

标签: php mysql

我有一个情况, 我的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     

2 个答案:

答案 0 :(得分: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
);

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

答案 1 :(得分:1)

可以获得每一行的“得分”,并根据该决定作出决定。这是一个快速示例,显示从哪里开始。

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

sqlfiddle

上查看