我有一个包含超过 800,000 条记录的表。每行有 8 列。我需要删除重复的记录,即 column1 和 column2 和 column5 相同。所有列都应该相同。
例如
第 1 列 | 第 2 列 | .... | 第 5 列
约翰 | 英文 | .... | 经过
亚历克斯 | 英文 | .... | 经过
约翰 | 化学| .... | 经过
约翰 | 英文 | .... | 经过
我想删除 1 条和最后一条记录。(即john+Eng+Pass)
我有一个包含超过 800,000 条记录的表。每行有 8 列。我需要删除重复的记录,即 column1 和 column2 和 column5 相同。所有列都应该相同。
例如
第 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 )
简化示例广告 sqlfiddle:http ://sqlfiddle.com/#!2/f97da/3/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小提琴: