加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql入门MySQL去重的方法整理

发布时间:2020-12-12 01:09:09 所属栏目:MySql教程 来源:网络整理
导读:《Mysql入门MySQL去重的方法整理》要点: 本文介绍了Mysql入门MySQL去重的方法整理,希望对您有用。如果有疑问,可以联系我们。 MySQL去重的方法整理 MYSQL实例 【初级】有极少的重复行 MYSQL实例 使用distinct查出来,然后手动一行一行删除. MYSQL实例 【中

《Mysql入门MySQL去重的方法整理》要点:
本文介绍了Mysql入门MySQL去重的方法整理,希望对您有用。如果有疑问,可以联系我们。

MySQL去重的方法整理MYSQL实例

【初级】有极少的重复行MYSQL实例

使用distinct查出来,然后手动一行一行删除.MYSQL实例

【中级】按照单个字段的重复去重MYSQL实例

例如:对id字段去重MYSQL实例

使用方法:获取id的重复字段的值,利用相同id字段所在的行中,比较出数据不同的字段,删除 除了最小(或最大)的字段所在的该行之外的所有重复的行.一般使用主键来比较,因为主键的值一定是唯一值,绝对不相同.MYSQL实例

id  name
1    a
1    b
2    c
2    a
3    c

结果:MYSQL实例

id  name
1    a 
2    a

操作:MYSQL实例

delete from a_tmp 
where id in (select * from (select b.id from a_tmp b group by b.id having count(b.id) >1) bb) 
and name not in (select * from (select min(a.name) from a_tmp a GROUP BY a.id having count(a.id) >1) aa);

注意:MYSQL实例

上述加粗并绿色的字,必须加别名,必须使用select * from (……)这样的格式,否则会报错:MYSQL实例

[Err] 1093 - You can't specify target table 'a_tmp' for update in FROM clauseMYSQL实例

【高级】按多个字段的重复来去重MYSQL实例

例如:对id,name相同的去重,即:对id,name都相同的算作重复行,对id相同而name不同的算作不重复行MYSQL实例

使用方法:和单个字段相似,一般使用主键来比较,因为主键的值一定是唯一值.MYSQL实例

id  name  rowid
1  a      1
1  a      2
1  b      3
2  b      4
2  b      5
3  c      6
3  d     7

结果:MYSQL实例

id  name  rowid
1  a      1 
1  b      3
2  b      4
3  c      6
3  d     7

操作:MYSQL实例

第一种:MYSQL实例

delete from a_tmp 
where (id,name) in (select * from (select b.id,b.name from a_tmp b group by b.id,b.name having count(b.id) >1) bb) 
and rowid not in (select * from (select min(a.rowid) from a_tmp a group by a.id,a.name having count(a.id) >1) aa);

第二种:MYSQL实例

将id和name字段的值连接起来插入到临时表中b_tmp,这样便可以使用【中级】的单字段的判断删除方法.MYSQL实例

#将两字段连接的值,a_tmp表中唯一值的字段插入b_tmp表MYSQL实例

insert into b_tmp 
 select concat(id,name),rowid from a_tmp;
#查出需要留下来的行
select id_name,max(rowid)
 from b_tmp 
 group by id_name
 having count(id_name)>1;
#使用【中级】的方法,或存储过程完成去重的工作

?【终极】每行都有两份一样的数据MYSQL实例

例如:MYSQL实例

使用方法:对于整行的数据都一样,是没办法使用SQL语句删除的,因为没有可以使用的条件限制来留下一行删除所有与其相同的行.没有不同的字段可以自己创造不同的字段,即:添加一个字段,设为自增长,并设为主键,它会自动添加上值.MYSQL实例

id  name
1   a
1   a
1   b
1   b
2   c
2   c
3   c
3   c

结果:MYSQL实例

id  name   rowid
1   a       1
1   b       3
2   c       5
3   c       7

操作:MYSQL实例

添加一个自增长的字段,并暂时设为主键.MYSQL实例

使用上面【中级】和【高级】的方法操作.MYSQL实例

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!MYSQL实例

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读