如何使用NOT IN子句添加超过1000个值

que*_*orn 3 sql oracle oracle11g

我有逗号分隔的ID,我想在NOT IN子句中使用..我正在使用oracle 11g.

select * from table where ID NOT IN (1,2,3,4,...,1001,1002,...)
Run Code Online (Sandbox Code Playgroud)

结果是

ORA-01795: maximum number of expressions in a list is 1000
Run Code Online (Sandbox Code Playgroud)

我不想使用临时表.我正在考虑这样做

select * from table1 where ID NOT IN (1,2,3,4,…,1000) AND 
ID NOT IN (1001,1002,…,2000)
Run Code Online (Sandbox Code Playgroud)

这个问题还有其他更好的解决方法吗?

wil*_*ynn 9

你说你不想,但是:使用临时表.这是正确的解决方案.

查询解析在Oracle中很昂贵,这就是当您将数千个标识符放入一大堆SQL时所获得的内容.此外,您将要查询的查询长度有不明确的限制.另一方面,对表执行反JOIN ... Oracle擅长这一点.将数据批量加载到表中,Oracle也很擅长.使用临时表.

限制IN为一千个条目是一个完整性检查.你打它的事实意味着你正试图做一些疯狂的事情.

  • "你打击它的事实意味着你正试图做一些疯狂的事情." 说得好. (4认同)