我正在使用NamedParameterJdbcTemplate来运行我的查询。查询如下:
SELECT id, desc FROM tableA WHERE id IN (:custIds);
现在,我正在调用一个Web服务,它正在返回一个id列表。所以我使用NamedParameterJdbcTemplate将id列表映射到“custIds”。但是,当ID列表超过1000时,我遇到了一个问题。我已经读过DB无法处理包含超过100或1000的IN。
由于我仅限于收到ID列表,您能否建议除NamedParameterJdbcTemplate外最好使用什么?
答案 0 :(得分:3)
您不能在IN
子句中使用超过1000个条目。如下所述,解决方案很少:
inner query
解决此问题。您可以创建临时表并在IN
子句中使用它。示例查询:
select id,desc from table_name where id in (select id from temp_table)
IN
子句分隔的多个OR
子句在1000个条目的批处理中打破它。示例查询:
select id,desc from table_name
where
id in (1,2,3,...1000)
or
id in (1001,1002,1003,...2000)
or
id in (2001,2002,...)
union all
代替OR
子句,在IN
子句中使用1000个条目进行查询示例查询:
select id,desc from table_name where id in (1,2,3,4,...,1000)
union all
select id,desc from table_name where id in (1001,1002,...2000)
union all
select id,desc from table_name where id in (2001,2002,...)