第1000条中的SQL项目限制

第1000条中的SQL项目限制,sql,oracle,Sql,Oracle,在SQL in子句中可以放置1000多个项目?我们的Oracle数据库一直存在无法处理的问题 如果是,我们如何在SQLIN子句中放置1000多个项目 如果没有,我还能做什么 您应该将IN子句转换为内部联接子句 您可以像这样转换查询 SELECT foo FROM bar WHERE bar.stuff IN (SELECT stuff FROM asdf) 在像这样的查询中,另一个 SELECT b.foo FROM ( SE

在SQL in子句中可以放置1000多个项目?我们的Oracle数据库一直存在无法处理的问题

如果是,我们如何在SQLIN子句中放置1000多个项目


如果没有,我还能做什么

您应该将IN子句转换为内部联接子句

您可以像这样转换查询

SELECT  foo   
FROM    bar   
WHERE bar.stuff IN  
       (SELECT  stuff FROM asdf)
在像这样的查询中,另一个

SELECT  b.foo 
FROM    ( 
        SELECT  DISTINCT stuff 
        FROM    asdf ) a 
JOIN    bar b 
ON      b.stuff = a.stuff

您还将获得大量性能

其他任何答案(或其他回答的问题)中都没有提到的其他解决方法:

任何类似于(1,2,3)中的
x的in语句都可以重写为((1,1)、(1,2)、(1,3))中的
(1,x)
,1000个元素的限制将不再适用。我已经用
x
上的索引进行了测试,解释计划仍然报告Oracle正在使用访问谓词和范围扫描。

另一种方法:

SELECT COL1, COL2, COL3 FROM YOUR_TABLE
WHERE 1=1
AND COL2 IN (
SELECT VAL1 as FAKE FROM DUAL
UNION
SELECT VAL2 as FAKE FROM DUAL
UNION
SELECT VAL3 as FAKE FROM DUAL
--...
)
对于同一个变量,可以有多个“IN”语句

例如:

select val
 from table
where val in (1,2,3,...)
or
val in (7,8,9,....)

可能的重复除了重复之外,我想让你知道条款内的限制是有原因的。这是一个资源极其密集的查询。你应该做@Jonathan提到的事情。可能重复+1的酷把戏:)-使用10001个元素进行测试-性能似乎受到影响though@Nitish我的猜测是,元组的支持来得比较晚,那时开发人员对ZOI原则有所了解。您知道如何使用JPA查询语言实现这一点吗?@JeffreyKempOracle似乎将元组样式的in子句限制为70000,这仍然比常规的in子句限制要好。您应该使用
UNION ALL
而不是
UNION
VALUES
构造函数,而不是这两个构造函数。这个答案非常古老——使用
VALUES
表构造函数