0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点#mysql删除重复记录

表由三个字段组成 id name type 关键是当时没设主键,现在有很多重复的数据,我可以用select distinct看到筛选后的数据,但是始终没有想到怎么删除重复数据。后来研究得到如下方法:

-- 原始表
create table ttd(
id varchar(30) not null,
name varchar(30) not null,
type int
);
insert into ttd(id, name, type) values ('a', 'na1', 1), ('b', 'nb1', 3), ('a', 'na1', 4), ('c', 'nc1', 1);

select * from ttd;

-- 临时表1
create table tmp1(
s serial, -- 自增
id varchar(30) not null,
name varchar(30) not null,
type int
);
-- 將原始表数据插入临时表1
insert into tmp1 (id, name, type) (select id, name, type from ttd);

-- 创建临时表2, 插入去重的数据
create table tmp2 as (
-- 因为 id 都是相同的, 就取 tmp1 自增最大的那个值, 去除相同的 id
select t1.id, t1.name, t1.type from tmp1 as t1
right join (
select max(s) as ms, id from tmp1 group by id
) as t2 on t1.id=t2.id and t1.s=t2.ms
);

-- 刪除原始表
drop table ttd;
-- 创建新的表
create table ttd(
id varchar(30) not null,
name varchar(30) not null,
type int,
primary key(id) -- 加入主鍵
);
-- 将去重后的 tmp2 数据写入到 新加的 ttd 表中
insert into ttd(id, name, type) (select * from tmp2);

-- 刪除临时表
drop table tmp1;
drop table tmp2;
select * from ttd;

举报

相关推荐

0 条评论