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