SQL IN子句1000项限制

SQL IN子句中可以放入1000多个项目吗? 我们遇到的Oracle数据库问题无法处理。

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

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

您应该将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 

你也会获得很多的performance

还有另一个解决方法,这是没有提到任何其他答案(或其他回答的问题):

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

对于同一个variables,我们可以有多个“IN”语句。

例如:

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

其他方式:

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