Mysql|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字段定义为主键
【Mysql|Mysql 数据库去掉指定字段重复的数据】如果将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;

    推荐阅读