我想用Java做一些事情(使用iBatis,JDBC等,真的在SQL中),如:
SELECT SUM(rowName) FROM myTable WHERE id = [myArrayOfIds]
myArrayOfIds几乎可以是任何长度。现在我知道你可以做到:
SELECT SUM(rowName) FROM myTable WHERE id IN (x, y, z)
但更长的名单会发生什么?例如,我的列表可以是几个项目到数百个或更多项目。我怎么能这样做?
答案 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个项目并聚合结果。无论哪种方式,您只是在处理持久性工具限制。