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

在mysql中删除3列的concat相同的重复记录?,mysql,duplicates,Mysql,Duplicates,我有一张80多万条记录的表格。每行有8列。我需要删除重复的记录,即第1列、第2列和第5列相同。所有列都应该相同 比如说 第1栏|第2栏|专栏5 约翰|英| | |通过 亚历克斯|英| | |通过 约翰化学通过 约翰|英| | |通过 我想删除1条和最后一条记录。(即john+Eng+Pass)让我们假设您的表名为t,t的主键是pk 我建议您分两步完成这项工作: 第一步:确定要删除的行 CREATE TEMPORARY TABLE to_delete AS select distinct

我有一张80多万条记录的表格。每行有8列。我需要删除重复的记录,即第1列、第2列和第5列相同。所有列都应该相同

比如说


第1栏|第2栏|专栏5


约翰|英| | |通过

亚历克斯|英| | |通过

约翰化学通过

约翰|英| | |通过



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

让我们假设您的表名为
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 )
简化的示例ad sqlfiddle:


免责声明:删除风险上的行。

让我们假设您的表名为
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 )
简化的示例ad sqlfiddle:

免责声明:删除风险上的行。

尝试以下查询:

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;
创建表abc(id int(11)主键自动递增,col_1 varchar(255),
col_2 varchar(255),col_3 varchar(255));
在abc(列1、列2、列3)中插入值('a'、'a'、'a'),
('a','b','c'),('a','a','a'),('b','b','b'),('a','b','c');
从abc a1中删除a1.*在a1.col_1=a2.col_1上连接abc a2
a1.col_2=a2.col_2和a1.col_3=a2.col_3和a1.id a2.id;
SQL Fiddle:

尝试以下查询:

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;
创建表abc(id int(11)主键自动递增,col_1 varchar(255),
col_2 varchar(255),col_3 varchar(255));
在abc(列1、列2、列3)中插入值('a'、'a'、'a'),
('a','b','c'),('a','a','a'),('b','b','b'),('a','b','c');
从abc a1中删除a1.*在a1.col_1=a2.col_1上连接abc a2
a1.col_2=a2.col_2和a1.col_3=a2.col_3和a1.id a2.id;
SQL Fiddle: