如何从数组中选择项目(IN子句详细信息)?

时间:2009-09-30 15:42:24

标签: java sql select jdbc ibatis

我想用Java做一些事情(使用iBatis,JDBC等,真的在SQL中),如:

SELECT SUM(rowName) FROM myTable WHERE id = [myArrayOfIds]

myArrayOfIds几乎可以是任何长度。现在我知道你可以做到:

SELECT SUM(rowName) FROM myTable WHERE id IN (x, y, z)

但更长的名单会发生什么?例如,我的列表可以是几个项目到数百个或更多项目。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

一种替代方法是将这些ID插入表中,然后进行连接

SELECT SUM(rowName) FROM myTable ta inner join tempTable tb on ta.id = tb.id

答案 1 :(得分:1)

我认为这取决于你的SQL风格。例如,Oracle在IN()列表中不允许超过1000个值。其他口味可能会有所不同。

答案 2 :(得分:0)

Oracle绝对允许IN子句中的1000多个项目。这是你的持久性工具,限制了这一点。 iBatis或Hibernate,无论如何。使用Oracle Sqlplus,您会发现这不是Oracle限制。

Suggestion from BlackTigerX可以使用,或者您可以多次调用查询,一次传递1000个项目并聚合结果。无论哪种方式,您只是在处理持久性工具限制。