具有多个具有1000个以上值的IN子句的Oracle查询

时间:2018-01-03 15:13:11

标签: oracle

我们可以使用多个IN子句进行oracle查询,每个子句可以有1000多个值吗?

select * from student where name in(1000+ values) and id in (1000+ values)

我已经看到其他线程与单个IN子句和解决方案临时表

具有相同类型的问题

由于 -Ranadheer

2 个答案:

答案 0 :(得分:2)

IN条件在另一个单词中表示OR,例如:

selecT * from table where col1 in('A','B','C')和它一样 selecT * from table where col1 ='A' or col1 ='B' or col1 ='C'所以想象你正在向1000+表达式添加OR,这对于性能和设计来说真的很糟糕,为什么你需要使用它呢?作为替代方案,您可以创建临时表并在其中添加值,并从中进行选择,例如

create table_tmp (SOME_EXPRESSION varchar2(1000) null)
insert into table_tmp  (SOME_EXPRESSION ) values ('some condition');
commit;

 select * from tab1 where col1 in (select SOME_EXPRESSION  from table_tmp )

答案 1 :(得分:0)

要回答您的问题,截至Oracle 12.2,限制仍然存在:

union { float f; int i; } x; x.f = a; printf("%d", x.i);
{ expr [ NOT ] IN ({ expression_list | subquery })
| ( expr [, expr ]... )
    [ NOT ] IN ({ expression_list [, expression_list ]...
                | subquery
                }
               )
}
  

您最多可以在{ expr [, expr ]... | ( [expr [, expr ]] ...) } 中指定1000个表达式。

如果临时表是唯一的问题,您必须注意,1,000项限制仅适用于单个expression_list条件,因此您可以根据需要始终IN()尽可能多的

OR