数据去重的几种实现形式
来源:互联网 发布:应聘淘宝客服 编辑:程序博客网 时间:2024/05/21 16:01
数据重复问题
对数据库进行操作,得到的结果有重复值,这是个不可避免的问题。从源头上分析,分两种情况:一是用户执行了sql语句,此时得到的结果就已经包含重复值;另一种就是返回的对象是执行多条sql语句后得到了,每条sql语句返回的对象没有重复值,但彼此之间存在重复现象,此时进行汇总操作就会出现重复值的情况。
- 执行sql后返回的结果包含重复值
例如如下一段代码
SELECT DISTINCT mti.* FROM m_table mti 。。。。。(一些连接查询语句)。。。。 WHERE sur.user_id=#{userId}
涉及了多表查询,用户表、用户—角色表、角色—表信息表、表信息表
通过当前的用户id拿到用户的角色列表,再对照角色-表信息表,拿到相应的表id,最后去表信息表中拿到用户对应表的详细信息。其中用户-角色表是一对多关系,角色-表信息表是多对多关系。
出现重复的原因:因为角色-表信息表是多对多的关系映射表,所以可能多个角色映射的表信息中存在重复值,通过用户id去得到最终的表详细信息时,就会有重复值,而用户并不需要查看重复的。最后给用户展现的应该是去掉重复值之后的最大集合结果
解决办法:distinct字段可以是在数据库层面上去重,如上代码块所示,select distinct 就会把最后的结果去重后再返回,解决了查询后出现重复值的问题。
- 多个List集合彼此之间包含重复值
出现重复的原因:有时候会存在要执行多条sql查询语句,其中每条语句返回的list结果都不包含重复值,但是多个list结果彼此间可能存在重复值,这时我们就需要对list集合结果进行去重合并了。
解决办法:1、set集合默认是不能添加重复值的,用set集合去接收就能解决了。
2、list集合中就已经实现了去重的API,我们直接使用就好了。如下所示:
List<Table> a = 。。。; List<Table> b= 。。。; a.removeAll(b); a.addAll(b);
首先调用removeAll方法,将a其中与b重复的Table对象全部移除,再调用addAll方法,将b中对象添加到a集合当中,实现去重合并。
阅读全文
1 0
- 数据去重的几种实现形式
- ORACLE 数据去重查询的几种常见方式
- 使用JavaScript实现数组去重的几种方式
- 数组去重的几种方式
- List去重的几种方法
- 数组去重的几种方法
- 数组去重的几种方法
- 数组去重的几种方法
- 数组去重的几种方法
- MySql数据库:数据查重、去重的实现
- 分布式锁的几种实现形式
- 几种形式队列的实现
- 一组数据去重和排序的实现
- python 列表去重(数组)的几种方法
- javascript 数组去重的几种方法
- IOS 数组去重的几种方式
- linux sh 去重的几种方法实例
- 数组去重的几种封装方法
- Java数字反转輸出
- OpenWrt启动过程分析+添加自启动脚本
- 从Github上Clone一个AndroidStudio工程如何配置环境
- 知识汇总一 (颜色模型)
- 如何在 OpenLayers 中调用中间件发布的WGS84卫星影像
- 数据去重的几种实现形式
- C++之双字节
- iOS 修改状态栏字体颜色
- 单链表插入排序
- win7+ubuntu16.04+centos7的引导问题
- 一些与WEBRTC相关的文章
- hdu1506 Largest Rectangle in a Histogram
- 恒德数字系统是什么、能做哪些系统?
- 心得