我们可以使用多个IN子句进行oracle查询,每个子句可以有1000多个值吗?
select * from student where name in(1000+ values) and id in (1000+ values)
我已经看到其他线程与单个IN子句和解决方案临时表
具有相同类型的问题由于 -Ranadheer
答案 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