sql语句中IN()的使用经验
来源:互联网 发布:高中软件 编辑:程序博客网 时间:2024/06/03 02:16
前言:在开发中,我们为了提高程序性能,往往会采用批量查询操作,这时候就会想到sql中使用IN()来查询,
但是这里有个坑我分享出来,希望大家用这个的时候注意一下,以免出错.
目录: 1.需求
2.场景再现
3.自己的解决方案
4.猜测的解决方案
5.小结
1.需求
数据库中有两张表,员工表 t_emp 和部门表 t_dep ,如图,现在需要获取 id 为 3,2,1 的员工所在的部门
如果用for循环来遍历查找,肯定不会出错的,但是数据量大的时候大家会用 IN 来进行批量查找,那么问题就出现了
2.场景再现
从输出结果可以看到,这个结果跟我们想象中的正确答案是不一样的,无论怎么变化 userIds 中的 id 顺序,查到的 depNames 集合
中的顺序始终是开发一部,开发二部,开发三部,与我们传入的用户id的顺序是无关的,这就是问题所在.
在开发中,别的系统往往会传给我们一个 id 集合,我们会根据这个 id 集合,在自己的系统中从不同的表中拼凑出他们需要的数据进行返回,
那么坑就来了,很容易发生上述情况,拼接出的数据信息并不是这个id对应的真是信息.下面谈一下我自己处理这个问题的方法.
3.自己的解决方案
我把查询结果封装在map集合中,拿到这是map集合中对应的 key 和 value 肯定是对应的,拿到map之后,在业务层遍历取出信息再根据需求进行重封装
4.猜测的解决方案
在一次技术分享中,我提出这个问题,想问大家有什么更好的解决方案没,因为我并不认为上述自己的解决方案是最优的,反而显得有点low,不优雅.
顾总给了一个方法,先用 order by 把传入的 id 集合排下序.
我自己有在很多表中进行测试,发现还真的没出问题,但是这里排序需要 id 从小到大的顺序.
虽然测试很多次都没出错,但是在实际开发中我还是一直没敢用这个方法,因为不明白原理,感觉很虚,再一个就是先要排序,略显麻烦.
5.小结
我在网上找过资料,想去找找根本原因,但是很遗憾没找到,之后弄清楚楚之后还会分享出来,看到这里的大牛们,有谁了解的分享出来!
- sql语句中IN()的使用经验
- 在spring 的jdbc sql中使用in 语句
- SQL 语句的经验
- ibatis中使用in写SQL语句
- SQL语句in中使用子查询
- ibatis中sql in语句的配置
- SQL语句中IN的用法
- SQL语句中 IN 的用法
- SQL语句中IN的用法
- beetl中sql的in语句
- 设计SQL语句的经验
- javascript中in语句的使用
- ibatis中写SQL语句时使用in遇到的问题描述
- mybatis的xml中sql语句中in的写法
- Sql语句中IN等方面的用法
- 在sql语句中替换Not In 的方法
- sql中in和exist语句的区别
- 在sql语句中替换Not In 的方法
- git ignore 添加忽略文件不生效解决办法
- 第二十四讲项目四 个人所得税计算器if语句版
- Android drawable不同文件夹的区别
- 春 诗歌2首
- 相位噪声@40 MHz的含义
- sql语句中IN()的使用经验
- 读书笔记之单例模式
- 接上一篇腾讯2016年微信红包编程题
- 如何在国内下载Eclipse及其插件
- 关于spring中使用redis中文乱码问题(redistemplate)
- kettle转换里面sql脚本的执行顺序
- 程序员必会技能系列(2)git的使用-2
- java中4种单例模式实现方法
- WebService之获取天气预报