Mysql 数据库去掉指定字段重复的数据

mysql 数据库去掉指定字段重复的数据

问题背景:

目前遇到一个问题需要进行数据的去重。

name sex email address
tony man tony@xxx.com dalian
tony man tony@xxx.com dalian

现在想要name字段上加上主键。这就需要冲掉重复的值。目前采用的方式可以如下

创建表的sql为

create table customers(
`name` varchar(30),
sex varchar(5),
email varchar(50),
address varchar(100)
);

造数据

insert into customers values ('tony','man','tony@xxx.com','dalian');
insert into customers values ('tony','man','tony@xxx.com','dalian');

需要将name字段定义为主键

如果将name字段定义为主键,那么问题来了,name字段有重复的怎么整?首先需要去掉重复值。

我们可以通过临时表的方式进行处理。

  1. 我们可以通过一个变量增加一个字段来做表的唯一标识
set @rownum =0;
select @rownum:=ifnull(@rownum,0)+1 as rownum , c.*from customers c;

  1. 用上面的方式创建一张临时表
set @rownum =0;
create table customers_temp select @rownum:=ifnull(@rownum,0)+1 as rownum , c.*from customers c;

  1. 执行查看临时表的数据
select * from customer_temp;

rownum name sex email address
1 tony man tony@xxx.com dalian
2 tony man tony@xxx.com dalian
  1. 我们可以直接将customer_temp表中的数据删掉。
Delete from customers_temp Where rownum Not In (Select Max(t.rownum) From (select * from customers_temp ) t Group By `name`);

为什么在子查询中又增加了一层子查询,如果不加会报错1093

现在我们只是剩下了rownum最大的一条,剩下的步骤,我们可以删掉之前的表,然后将customers_temp 重命名为customers即可。

drop table customers;

RENAME TABLE customers_temp TO customers;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,171评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 各位下午好,我是红枕斜阳。接下来要和大家讨论的话题是:“梭哈”可以暴富吗? 梭哈,又称沙蟹、谷啤,学名Five C...
    红枕斜阳阅读 1,378评论 0 0
  • 一来踏入峥嵘梦,只叹当局难明晓。 一身钝气携情义,没心没肺熬得巧。 一夜辉煌割情苦,满腹感恩诉渺渺。 一年到头千般...
    蒙初凝琪阅读 435评论 0 0
  • 早上上班本打算像往常一样,边走边听小说,可是,听着听着就开始胡思乱想。眼泪就不自觉地往下掉。早上起来就没让自己再睡...
    努力的小暖阅读 537评论 0 0