oracle数据库中,如果你使用in,然后括号对应的是一个子查询,当查询出来的结果>1000的时候就会报错。

这个是数据库的规定,我们无法改变它。

如何解决这个问题呢?

现在我看到了三种解决方式:

1、使用in限制范围为1000,那么就使用多个in拼接。

in (x,x,x) or in (y,y,y) or in ...

这种方法我尝试过,感觉最不好用,如果数据量小的话ok,我哪里才几万条数据就卡,相当于执行多条sql语句。

别人的评价:

一般来说,不建议使用很复杂的sql语句。可以简单的认为,sql语句执行的时间复杂度与sql语句的长度相关。
in太多,在数据量过大的时候,可能就不是慢的问题了,而是sql执行线程locked。
常见的处理方式,是将“条件部分符合”的数据一次性全从数据库中拿出来,然后在代码中,遍历这些记录,找出符合条件(in条件)的记录。充分利用服务器的计算能力,以期减少数据库的压力。

2、使用临时表,将in中的内容查询插入临时表中。然后子查询进行匹配。这个我没有尝试。有空试试。

前面以为in对应子查询如果里面的内容>1000会报错,尝试了一下,不报错。

select * from mpmerdtl where agent_ID in(select member_id from mpagent)

3、不要使用in关键字,直接使用表连接。个人感觉这种是速度最快的一种。我出现这问题的时候解决方式就是手写的sql。

left join...

感觉这样看来解决的三种方案,第一种是因为in的数据是集合,不是表中的,所以拆分成1000以内的n个集合进行查询拼接。第二种子查询,第三种连接查询。

欢迎大家见解!

mybatis中oracle in>1000的处理的更多相关文章

  1. mybatis中Oracle分页语句的写法

    最近一段时间使用oracle数据库查询分页, 用的是springboot. Oracle数据库中没有像mysql中limit的写法, 只能换其他方式写. 考虑到oracle中的ROWNUM变量, 使用 ...

  2. mybatis中oracle转mysql

    刚来公司实习,遇到的第一个任务就是这个,简单记录一下思路过程.人菜的很,没啥参考价值. 测试时: 将现有的oracle库转为mysql: 用的Navicat自带数据传输功能,简单粗暴 出现的问题: 1 ...

  3. mybatis中oracle实现分页效果

    首先当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致 ...

  4. mybatis中Oracle及mysql插入时自动生成主键以及返回主键

    mysql的方式: 方式一: useGeneratedKeys="true" keyProperty="id" 方式二: <selectKey keyPr ...

  5. Mybatis中oracle如何批量insert语句

    <insert id="batchInsertNoticeUser" useGeneratedKeys="false" keyProperty=" ...

  6. Mybatis中实现oracle的批量插入、更新

    oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.S ...

  7. ORACLE中关于使用between在MyBatis中取不同的区间值和取反

    最近在项目中使用between取不同的区间值问题,由于区间跨度大,而且区间多,又是前端传过来的参数,所以使用in和exists比较麻烦.然后就考虑使用between.现将使用方法记录一下. 假如表有个 ...

  8. Mybatis在oracle数据库中插入数据后返回自增值ID

    1.将id设置成自增序列 CREATE OR REPLACE TRIGGER "DATALIB"."TRIG_USER_ADD" BEFORE INSERT O ...

  9. MyBatis在Oracle中插入数据并返回主键的问题解决

    引言:  在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2   SQL Snipp ...

随机推荐

  1. mysql使用笔记(四)

    一.选择合适的数据类型 1. CHAR vs VCHAR     char是固定长度的字符类型,而varchar是可变长度的字符类型.char(M)的数据列中,每个值都占用M个字节,如果某个长度小于M ...

  2. iOS开发 判断代理以及代理方法是否有人遵循

    if (self.delegate && [self.delegate respondsToSelector:@selector]) { return YES; }

  3. [C:\Users\Administrator\.IntelliJIdea2016.1\system\tomcat\Unnamed_demo_2\work\Catalina\localhost\demo\org\apache\jsp\index_jsp.java]

    http://www.oschina.net/question/1444338_2146454?sort=time

  4. eclipse 中发布 maven 项目到 tomcat

    第一步:在 eclipse 中 右键  你的项目 Run as --> Maven build...--> Goals: 输入 install   run 第二步:在 eclipse 中 ...

  5. View绑定式监听器实现原理

    在我们开发android的时候,会经常重写自定义的View去满足一些需求 然后有时候view会提供一些回调,比如view某个部分被点击了,我们需要通知使用者然后再通过接口传一些参数过去. 对于我之前的 ...

  6. 【Problem solved】 error C2665: “loadimage”: 2 个重载中没有一个可以转换所有参数类型

    选择“项目”菜单->项目属性->配置属性->常规->字符集,改为“未设置”即可.

  7. 初识Ildasm.exe——IL反编译的实用工具

    原文地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要: 一.前言: 微软的IL反 ...

  8. hibernate的懒加载问题

    产生原因: 当使用hibernate查询一个对象的时候,如果Session关闭,再调用该对象关联的集合或者对象的时候,会产生懒加载异常! 解决方案: 方案一: 在Session关闭之前,查询对象关联的 ...

  9. Github/Eclipse管理Maven项目

    Eclipse和Git插件 (To-do: 直接从workspace导入也可以,弄明白这个repo管理的本质,查看sprigmvc是如何导入的) 最新版本的Eclipse都直接集成了Git插件 Ecl ...

  10. JAVA 接口与继承作业——动手动脑以及课后实验性问题

    一.继承条件下的构造方法调用 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构 ...