删除mysql中3列的concat相同的重复记录?

时间:2013-03-07 17:10:26

标签: mysql duplicates

我有一张超过800,000条记录的表格。每行有8列。我需要删除重复的记录,即column1和column2和column5相同。所有列都应该相同。

例如


Column1 | Column2 | .... | column5


约翰| Eng | .... |通

Alex | Eng | .... |通

约翰|化学| .... |通

约翰| Eng | .... |通


我想删除1和最后一条记录。 (即john + Eng + Pass)

2 个答案:

答案 0 :(得分:1)

让我们知道你的表名为t,而t的主键是pk

我建议您分两步完成工作:

第一步:识别要删除的行

CREATE TEMPORARY TABLE to_delete AS 
select distinct
     t2.pk
from
     t t1
inner join
     t t2
where
     t1.c1 = t2.c1 and 
     t1.c2 = t2.c2 and 
     t1.c5 = t2.c5 and
     t2.pk > t1.pk      #erase this line to
                        #delete all dups rows

第二步:删除行

delete from t
where t.pk in (select pk from to_delete )

简化示例广告尺寸:http://sqlfiddle.com/#!2/f97da/3/0

免责声明:删除风险行。

答案 1 :(得分:0)

尝试以下查询:

create table abc (id int(11) primary key auto_increment, col_1 varchar(255), 
col_2 varchar(255), col_3 varchar(255));

insert into abc (col_1, col_2, col_3) values ('a', 'a', 'a'),
('a', 'b', 'c'), ('a','a', 'a'), ('b','b','b'),('a','b','c');

DELETE a1.* from abc a1 inner join abc a2 ON a1.col_1 = a2.col_1 
AND a1.col_2 = a2.col_2 AND a1.col_3 = a2.col_3 AND a1.id <> a2.id;

SQL小提琴:

http://sqlfiddle.com/#!2/08e4b/1