【问题标题】:Mysql - Delete rows with duplicate columns [duplicate]Mysql - 删除具有重复列的行[重复]
【发布时间】:2015-05-25 15:35:54
【问题描述】:

此查询返回重复列 col B、col C、col D 的计数

SELECT `colB`, `colC`, `colD`, COUNT(1) as CNT
FROM `table`
GROUP BY `colB`, `colC`, `colD` 
HAVING COUNT(1) > 1

如何在保留一条的同时删除重复的记录?

DELETE FROM `table` WHERE  ( 
// Keep one record and delete rows with duplicate columns b,c,d 
)

colA 是主键 - AI

【问题讨论】:

    标签: sql


    【解决方案1】:

    如果你有主键,你可以这样做:

    delete t
       from table t left join
            (select cola, colb, colc, min(cola) as cola
             from table t
             group by cola, colb, colc
            ) tokeep
            on t.cola = tokeep.cola
        where tokeep.cola is null;
    

    但是,对表进行大量删除可能效率低下。因此,将数据移动到临时表并重新插入通常会更快:

    create temporary table tokeep as
        select min(cola) as cola, colb, colc, cold
        from table t
        group by colb, colc, cold
    
    truncate table `table`;
    
    insert into `table`(cola, colb, colc, cold)
        select cola, colb, colc, cold
        from tokeep;
    

    【讨论】:

      【解决方案2】:

      试试这个

      DELETE  a
      FROM    table a
              LEFT JOIN
              (
                  SELECT MIN(colA) colA , colB , colC ,colD 
                  FROM    Table
                  GROUP   BY colB , colC,colD  
              ) b ON  a.colA = b.colA and a.colB = b.colB and a.colC = b.colC and a.colD = b.colD
      WHERE   b.colA IS NULL
      

      【讨论】:

        【解决方案3】:

        尝试类似:

        DELETE t1 
        FROM table t1 INNER JOIN table t2 
        ON t1.colB = t2.ColB 
        AND t1.colC = t2.ColC 
        AND t1.colD = t2.ColD
        AND t1.colA > t2.ColA
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2012-11-19
          • 1970-01-01
          • 1970-01-01
          • 2017-10-11
          • 2019-07-17
          相关资源
          最近更新 更多