SQL语句“IN”包含太多表达式

时间:2010-11-08 03:43:20

标签: java sql jdbc

我使用JDBC通过'IN'语句检索Oracle数据库。但是有太多的表达式,大约> 1000。 它看起来像:

SELECT * FROM MyTable WHERE name IN (?, ?, ?......); --More than 1000 question signal

导致'语法错误或访问规则违规',这意味着'列表中的最大表达式数为1000 '。

我是否必须多次执行检索操作(例如,使用100'?'并检索10次)并合并列表? 更好的解决方案?谢谢!

编辑: 我没有机会修改数据库,这不是我的艺术作品。

4 个答案:

答案 0 :(得分:6)

我会重新思考为什么你需要传递那么多要寻找的东西的逻辑。也许有一种不同的方式来指定你要找的东西。

或者,另一个选项是创建一个临时表,将要查找的键加载到表中,然后在数据表和键表之间进行连接。那么你不需要in()子句。

答案 1 :(得分:1)

如果您有那么多表达式,可能更容易将它们插入临时表,然后针对临时查询MyTable。

答案 2 :(得分:1)

围绕这个的蛮力方式是

(foo in (1,4,8,12,1000))  or (foo in (2333,2443,2453,4665))

其中每个in子句小于1000

当然,查询性能的可能性不是很好。

答案 3 :(得分:0)

Oracle存在IN列表> ~1000的问题。

  1. JOIN:使用列表项创建一个(可选的临时)表,并将表连接到查询中。如果使用更持久的表,则将会话标识符作为键。这样的声音可能无法正常工作,因为您无法访问架构?
  2. UNION(ALL):将您的列表分成1000以下,并选择union multiple,
  3. OR :(已提及)或您的清单
  4. 就个人而言,我更喜欢加入这种类型的东西。