SQL IN条款1000项限制

时间:2011-01-18 09:04:30

标签: sql oracle

可以在SQL IN子句中放置超过1000个项目吗?我们的Oracle数据库无法解决问题。

如果是,我们如何在SQL IN子句中放置超过1000个项目?

如果没有,我还能做什么?

4 个答案:

答案 0 :(得分:80)

还有另一种解决方法,在任何其他答案(或其他已回答的问题)中都没有提及:

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

答案 1 :(得分:55)

您应该将IN子句转换为INNER JOIN子句。

您可以转换像这样的查询

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

你也会获得很多表现

答案 2 :(得分:5)

我们可以拥有多个" IN"同一个变量的陈述。

例如:

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

答案 3 :(得分:-1)

另一种方式:

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
--...
)