MySQL去重的方法整理

作者:lqh 时间:2024-01-27 07:04:42 

MySQL去重的方法整理

【初级】有极少的重复行

使用distinct查出来,然后手动一行一行删除。

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

例如:对id字段去重

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


id  name

1    a

1    b

2    c

2    a

3    c

结果:


id  name

1    a

2    a

操作:


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);

注意:

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

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

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

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

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


id  name  rowid

1  a      1

1  a      2

1  b      3

2  b      4

2  b      5

3  c      6

3  d     7

结果:


id  name  rowid

1  a      1

1  b      3

2  b      4

3  c      6

3  d     7

操作:

第一种:


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);

第二种:

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

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


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;

#使用【中级】的方法,或存储过程完成去重的工作

 【终极】每行都有两份一样的数据

例如:

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


id  name

1   a

1   a

1   b

1   b

2   c

2   c

3   c

3   c

结果:


id  name   rowid

1   a       1

1   b       3

2   c       5

3   c       7

操作:

添加一个自增长的字段,并暂时设为主键。

使用上面【中级】和【高级】的方法操作。

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

来源:https://my.oschina.net/starglm/blog/748701

标签:MySQL,去重
0
投稿

猜你喜欢

  • php中重定向网页跳转方法总结案例教程

    2023-06-11 20:47:18
  • PHP解析xml格式数据工具类示例

    2023-11-19 20:05:53
  • python字符串替换的2种方法

    2022-12-27 20:59:24
  • Python实现连接MySQL数据库的常见方法总结

    2024-01-22 05:28:26
  • Nodejs实现短信验证码功能

    2024-05-08 09:37:32
  • 详解js根据百度地图提供经纬度计算两点距离

    2024-04-29 13:40:51
  • 在Mac中PyCharm配置python Anaconda环境过程图解

    2023-10-19 01:22:53
  • Python如何对文件进行重命名

    2022-01-20 12:31:51
  • Pandas之groupby( )用法笔记小结

    2023-03-03 15:58:24
  • python 用opencv实现霍夫线变换

    2021-09-14 20:18:25
  • ASP用户登录模块的设计

    2008-11-21 16:55:00
  • Mysql导入导出时遇到的问题解决

    2024-01-22 02:28:06
  • python中函数总结之装饰器闭包详解

    2023-06-27 02:55:04
  • [翻译]标记语言和样式手册 Chapter 14 图片替换

    2008-02-18 12:56:00
  • PHP的PDO大对象(LOBs)

    2023-06-07 06:45:36
  • Python实现两个list求交集,并集,差集的方法示例

    2021-12-27 19:52:06
  • Mysql join连接查询的语法与示例

    2024-01-15 07:34:48
  • Python源码学习之PyType_Type和PyBaseObject_Type详解

    2023-08-03 15:50:05
  • 利用WebBrowser彻底解决Web打印问题(包括后台打印)

    2024-04-27 15:17:55
  • Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法

    2009-11-05 21:45:00
  • asp之家 网络编程 m.aspxhome.com