温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL如何消除重复行

发布时间:2021-01-15 12:21:40 来源:亿速云 阅读:201 作者:小新 栏目:MySQL数据库

这篇文章给大家分享的是有关MySQL如何消除重复行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

sql语句

/* MySQL 消除重复行的一些方法 ---Chu Minfei ---2010-08-12 22:49:44.660 --引用转载请注明出处:http://blog.csdn.NET/feixianxxx */ ----------------全部字段重复------------------------  --1使用表替换来删除重复项  create table test_1(id int,value 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 * from test_1;  --删除原表  drop table test_1;  --更改临时表名为目标表  rename table tmp to test_1;  --显示  mysql> select * from test_1; +------+-------+ | id  | value | +------+-------+ |  1 |   2 | |  2 |   3 | +------+-------+  --2.添加auto_increment属性列(这个方法只能用于MyISAM或者BDB引擎的表)  create table test_1(id int,value int) engine=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 key(id,value,id2);  select * from test_1; +----+-------+-----+ | id | value | id2 | +----+-------+-----+ | 1 |   2 |  1 | | 1 |   2 |  2 | | 2 |   3 |  1 | +----+-------+-----+   delete from test_1 where id2<>1;   alter table test_1 drop id2;   select * from test_1;   +----+-------+ | id | value | +----+-------+ | 1 |   2 | | 2 |   3 | +----+-------+ -------------------部分字段重复--------------------- --1.加索引的方式  create table test_2(id int,value int);  insert test_2 select 1,2 union all select 1,3 union all select 2,3;  Alter IGNORE table test_2 add primary key(id);  select * from test_2;  +----+-------+ | id | value | +----+-------+ | 1 |   2 | | 2 |   3 | +----+-------+  我们可以看到 1 3 这条记录消失了   我们这里也可以使用Unique约束 因为有可能列中有NULL值,但是这里NULL就可以多个了..  --2.联合表删除  create table test_2(id int,value int);  insert test_2 select 1,2 union all select 1,3 union all select 2,3;  delete A from test_2 a join (select MAX(value) as v ,ID from test_2 group by id) b  on a.id=b.id and a.value<>b.v;  select * from test_2;  +------+-------+ | id  | value | +------+-------+ |  1 |   3 | |  2 |   3 | +------+-------+ --3.使用Increment_auto也可以就是上面全部字段去重的第二个方法 --4.容易错误的方法 --有些朋友可能会想到子查询的方法,我们来试验一下  create table test_2(id int,value int);  insert test_2 select 1,2 union all select 1,3 union all select 2,3;  delete a from test_2 a where exists(select * from test_2 where a.id=id and a.value<value);  /*ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause*/    目前,您不能从一个表中删除,同时又在子查询中从同一个表中选择。      ------------------删除特定重复行--------------  --主要通过order by +limit 或者直接limit   create table test_3(id int,value int);  insert test_3 select 1,2 union all select 1,3 union all select 1,4 union all select 2,3;  --这是要保留ID=1 value最小的那个记录,删除其他id为的记录  delete from test_3 where id=1 order by value desc limit 2;  select * from test_3; +------+-------+ | id  | value | +------+-------+ |  1 |   2 | |  2 |   3 | +------+-------+  如果你只想删除任意的记录 保留一条 就可以去掉order by

感谢各位的阅读!关于“MySQL如何消除重复行”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI