有如下查询语句:
select * from t_table where id in(id1,id2,...id10000)这种情况一般不会多见。在oracle中执行会抛"ORA-01795:表达式超过1000列"的异常
如何解决这个问题呢?
1) 将"in"表达式中的条件数据分为多份"or in"的表达式来执行。改变的代码如下
select * from t_table where id in (id1, id2, id3)
or id in(id4,id5,id6)...
这种方法比较简便,但不易于维护。而且当id量过大时,分组过多效率也会很低。
2) 可以通过临时表来解决问题
a) 创建临时表tbIdGroud,其中只有一个字段id,且为主键。
b) 将大批量的id条件插入tbIdGroud
c) 关联t_table,tbIdGroud进行多表查询。
这种需要将条件数据插入临时表,会有一定的性能消耗,当id量不是超大时一般不推荐使用。
3) 需求过程中的解决
这种问题的出现,可以回过来想是否在需求上还可以有更好的方法。可以通过以下方法类避开这个问题
a) 当提交时超过一定数量的条件进入时,异常处理。
b) 试着用模糊查询或定位查询来替换。