• 售前

  • 售后

热门帖子
入门百科

MySQL去重的方法整理

[复制链接]
123457886 显示全部楼层 发表于 2021-10-25 19:52:02 |阅读模式 打印 上一主题 下一主题
MySQL去重的方法整理
【低级】有极少的重复行
利用distinct查出来,然后手动一行一行删除。
【中级】按照单个字段的重复去重
比方:对id字段去重
利用方法:获取id的重复字段的值,利用相同id字段所在的行中,比力出数据差异的字段,删除 除了最小(或最大)的字段所在的该行之外的全部重复的行。一样平常利用主键来比力,由于主键的值肯定是唯一值,绝对不相同。
  1. id  name
  2. 1    a
  3. 1    b
  4. 2    c
  5. 2    a
  6. 3    c
复制代码
结果:
  1. id  name
  2. 1    a
  3. 2    a
复制代码
操纵:
  1. delete from a_tmp
  2. where id in (select * from (select b.id from a_tmp b group by b.id having count(b.id) >1) bb)
  3. and name not in (select * from (select min(a.name) from a_tmp a GROUP BY a.id having count(a.id) >1) aa);
复制代码
注意:
上述加粗并绿色的字,必须加别名,必须利用select * from (……)如许的格式,否则会报错:
[Err] 1093 - You can't specify target table 'a_tmp' for update in FROM clause
【高级】按多个字段的重复来去重
比方:对id,name相同的去重,即:对id,name都相同的算作重复行,对id相同而name差异的算作不重复行
利用方法:和单个字段相似,一样平常利用主键来比力,由于主键的值肯定是唯一值。
  1. id  name  rowid
  2. 1  a      1
  3. 1  a      2
  4. 1  b      3
  5. 2  b      4
  6. 2  b      5
  7. 3  c      6
  8. 3  d     7
复制代码
结果:
  1. id  name  rowid
  2. 1  a      1
  3. 1  b      3
  4. 2  b      4
  5. 3  c      6
  6. 3  d     7
复制代码
操纵:
第一种:
  1. delete from a_tmp
  2. 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)
  3. 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);
复制代码
第二种:
将id和name字段的值毗连起来插入到暂时表中b_tmp,如许便可以利用【中级】的单字段的判断删除方法。
#将两字段毗连的值,a_tmp表中唯一值的字段插入b_tmp表
  1. insert into b_tmp
  2. select concat(id,name),rowid from a_tmp;
  3. #查出需要留下来的行
  4. select id_name,max(rowid)
  5. from b_tmp
  6. group by id_name
  7. having count(id_name)>1;
  8. #使用【中级】的方法,或存储过程完成去重的工作
复制代码
【终极】每行都有两份一样的数据
比方:
利用方法:对于整行的数据都一样,是没办法利用SQL语句删除的,由于没有可以利用的条件限制来留下一行删除全部与其相同的行。没有差异的字段可以自己创造差异的字段,即:添加一个字段,设为自增长,并设为主键,它会主动添加上值。
  1. id  name
  2. 1   a
  3. 1   a
  4. 1   b
  5. 1   b
  6. 2   c
  7. 2   c
  8. 3   c
  9. 3   c
复制代码
结果:
  1. id  name   rowid
  2. 1   a       1
  3. 1   b       3
  4. 2   c       5
  5. 3   c       7
复制代码
操纵:
添加一个自增长的字段,并暂时设为主键。
利用上面【中级】和【高级】的方法操纵。
感谢阅读,希望能资助到各人,谢谢各人对本站的支持!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作