1

我想在 Java 中做一些事情(使用 iBatis、JDBC 等,实际上是在 SQL 中),例如:

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

其中 myArrayOfIds 几乎可以是任何长度。现在我知道你可以这样做:

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

但是更长的列表会发生什么?例如,我的列表可能少到几项,也可能是数百项或更多项。我怎样才能做到这一点?

4

3 回答 3

1

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

SELECT SUM(rowName) FROM myTable ta inner join tempTable tb on ta.id = tb.id
于 2009-09-30T15:44:12.907 回答
1

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

于 2009-09-30T15:49:35.083 回答
0

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

BlackTigerX 的建议可行,或者您可以多次调用查询,一次传递 1000 个项目并汇总结果。无论哪种方式,您都只是在解决您的持久性工具限制。

于 2011-04-25T04:17:19.180 回答