MySQL怎么消除重复行

  介绍

这篇文章将为大家详细讲解有关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怎么消除重复行