介绍
这篇文章将为大家详细讲解有关MySQL怎么消除重复行,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
sql语句
/* MySQL 消除重复行的一些方法 ——-Chu Minfei ——2010 - 08 - 12,22:49:44.660 ——引用转载请注明出处:http://blog.csdn.NET/feixianxxx */- - - - - - - - - - - - - - - - -全部字段重复- - - - - - - - - - - - - - - - - - - - - - - - ,- 1使用表替换来删除重复项 ,create table  test_1 (value  id , int, int); ,insert test_1  select 1, 2, union all select 1, 2, union all select 2、3; ,——建立一个和源表结构一样的空的临时表 ,create table  tmp like  test_1; ,——向临时表插入不重复的记录 ,insert tmp  select distinct *,得到test_1; ,,删除原表 ,drop table  test_1; ,——更改临时表名为目标表 ,rename table  tmp 用test_1; ,——显示 ,mysql> select *,得到test_1; + - - - - - - - - - - - - - + | |,id 还以为;value | + - - - - - - - - - - - - - + |,,1,|,,,2 | |,,2,|,,,3 | + - - - - - - - - - - - - - + ,2。添加auto_increment属性列(这个方法只能用于MyISAM或者BDB引擎的表) ,create table  test_1 (value  id , int, int),引擎=MyISAM; ,insert test_1  select 1, 2, union all select 1, 2, union all select 2、3; ,alter table  test_1 add  id2 int not null auto_increment, ,add primary 关键(id、价值id2); ,select *,得到test_1; + - - - + - - - - - - - - - - - - - + + | |,id value | id2 | + - - - + - - - - - - - - - - - - - + + |,1,|,,,2,|,,1 | |,1,|,,,2,|,,2 | |,2,|,,,3,|,,1 | + - - - + - - - - - - - - - - - - - + + delete 才能得到test_1 where id2<在1; alter 才能table test_1  drop id2; select *,才能得到test_1; + - - - +才能- - - - - - - + | |,id value | + - - - + - - - - - - - + |,1,|,,,2 | |,2,|,,,3 | + - - - + - - - - - - - + - - - - - - - - - - - - - - - - - - -部分字段重复- - - - - - - - - - - - - - - - - - - - - - - - ——1。加索引的方式 ,create table  test_2 (value  id , int, int); ,insert test_2  select 1, 2, union all select 1, 3, union all select 2、3; ,Alter IGNORE  table test_2  add primary 关键(id); ,select *,得到test_2; ,+ - - - + - - - - - - - + | |,id value | + - - - + - - - - - - - + |,1,|,,,2 | |,2,|,,,3 | + - - - + - - - - - - - + ,我们可以看到,1,3,这条记录消失了, ,我们这里也可以使用独特的约束,因为有可能列中有NULL值,但是这里空就可以多个了. . ,2。联合表删除 ,create table  test_2 (value  id , int, int); ,insert test_2  select 1, 2, union all select 1, 3, union all select 2、3; ,delete A 得到test_2 A join (select 马克斯(值),as v , ID 得到test_2 group by id), b ,提醒a.id=b.id 以及a.value<祝辞b.v; ,select *,得到test_2; ,+ - - - - - - - - - - - - - + | |,id 还以为;value | + - - - - - - - - - - - - - + |,,1,|,,,3 | |,,2,|,,,3 | + - - - - - - - - - - - - - + ——3。使用Increment_auto也可以就是上面全部字段去重的第二个方法 ——4。容易错误的方法 ——有些朋友可能会想到子查询的方法,我们来试验一下 ,create table  test_2 (value  id , int, int); ,insert test_2  select 1, 2, union all select 1, 3, union all select 2、3; ,delete a 得到test_2 a where 存在(select *,得到test_2 where a.id=id 以及a.value<价值); ,/* ERROR 1093, (HY000):,你停下来# 39;t specify target table & # 39;一个# 39;,for update 拷贝得到条款*/, ,目前,您不能从一个表中删除,同时又在子查询中从同一个表中选择。 , , ,- - - - - - - - - - - - - - - - - -删除特定重复行- - - - - - - - - - - - - - - ,,主要通过order by + limit 或者直接limit ,create table  test_3 (value  id , int, int); ,insert test_3  select 1, 2, union all select 1, 3, union all select 1, 4, union all select 2、3; ,——这是要保留ID=1,价值最小的那个记录,删除其ID为他的记录 得到,delete  test_3 where id=1, order by value desc limit 2; ,select *,得到test_3; + - - - - - - - - - - - - - + | |,id 还以为;value | + - - - - - - - - - - - - - + |,,1,|,,,2 | |,,2,|,,,3 | + - - - - - - - - - - - - - + ,如果你只想删除任意的记录,保留一条,就可以去掉order 通过MySQL怎么消除重复行