Mysql - 删除具有重复列的行

15 浏览
0 Comments

Mysql - 删除具有重复列的行

这个查询返回了列B、列C、列D的重复计数。

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

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

DELETE FROM `table` WHERE (
//保留一条记录并删除具有重复的b、c、d列的行
)

colA是主键-AI。

0
0 Comments

Mysql - 删除具有重复列的行

当我们在处理数据库时,有时会遇到需要删除具有重复列的行的情况。这可能是由于数据导入错误、重复插入数据或其他原因导致的。

为了解决这个问题,我们可以使用Mysql中的DELETE语句,并结合INNER JOIN来删除重复的行。下面是一个示例代码:

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

在上述代码中,我们使用了DELETE语句来删除表中的行。我们将同一张表(table)连接起来,通过INNER JOIN来找出具有重复列的行。通过指定多个条件(t1.colB = t2.ColB,t1.colC = t2.ColC,t1.colD = t2.ColD),我们可以筛选出重复的行。最后,我们通过比较列t1.colA和t2.ColA的值来确定哪些行应该被删除。

使用这种方法,我们可以轻松地删除具有重复列的行,以保持数据的完整性和一致性。

以上就是解决Mysql中删除具有重复列的行的方法。通过使用DELETE语句和INNER JOIN,我们可以方便地删除重复的数据,确保数据库中的数据是准确和完整的。

0
0 Comments

MySQL中使用DELETE语句删除具有重复列的行是一个常见的问题。这种情况通常发生在表中存在重复数据时。下面是一个解决这个问题的方法。

首先,我们可以使用LEFT JOIN将表a与一个子查询的结果集b进行连接。子查询使用GROUP BY子句根据列B、C和D分组,并选择每个分组中具有最小列A值的行。

接下来,我们将连接条件设置为a表的列A等于b表的列A,并且a表的列B等于b表的列B,以此类推。这样,我们就可以将a表中与b表中具有重复列值的行进行连接。

然后,我们使用WHERE子句过滤掉与b表中的连接结果为空的行。这些行是a表中具有重复列值的行。最后,我们使用DELETE语句将这些行从表a中删除。

下面是一个完整的解决方案的示例代码:

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

通过使用上述代码,我们可以删除具有重复列值的行,只保留每个分组中具有最小列A值的行。这样,我们可以解决MySQL中删除具有重复列的行的问题。

0
0 Comments

在MySQL中删除具有重复列的行是一个常见的问题。出现这个问题的原因是表中存在重复的记录,即某些列的值完全相同。

解决这个问题的方法有两种。第一种方法是使用主键来删除重复的行。具体操作是先通过左连接将表自身与一个子查询进行连接,子查询中使用GROUP BY语句将重复的列值进行分组,并选择其中最小的值作为保留值。然后再通过WHERE条件将连接结果中保留值为空的行进行删除。具体代码如下:

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;

然而,频繁删除表中的行可能效率较低。所以,第二种方法是将数据移动到一个临时表中,并重新插入到原表中。具体操作是先创建一个临时表tokeep,通过GROUP BY语句将重复的列值进行分组,并选择其中最小的值作为保留值。然后通过TRUNCATE TABLE语句清空原表的数据,再通过INSERT INTO语句将临时表中的数据重新插入到原表中。具体代码如下:

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;

通过以上两种方法,可以有效地删除MySQL表中重复的行。第一种方法通过删除操作直接删除重复的行,适用于数据量较小的情况。第二种方法则通过先将数据移动到临时表,再重新插入到原表中的方式来处理重复的行,适用于数据量较大的情况。根据具体的情况选择合适的方法,可以提高删除重复行的效率。

0