• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL消除重复行方法分享

mysql 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

本文主要介绍了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 |+----+-------+<mark style="color:transparent">本文来源gaodaimacom搞#^代%!码&网*</mark>-----+  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

相关推荐:

关于消除重复行的详细介绍

消除数组重复项,并且让键值重新从0开始排列

HTML 外边距折叠,以及消除的办法_html/css_WEB-ITnose

以上就是MySQL消除重复行方法分享的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL消除重复行方法分享
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址