2009-09-30 42 views
1

我想這樣做在Java中的東西(使用iBATIS,JDBC等,真正SQL),如:如何從數組中選擇項目(IN子句細節)?

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

哪裏myArrayOfIds幾乎可以是任何長度。現在我知道你可以這樣做:

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

但是對於更長的列表會發生什麼?例如,我的清單可以少至幾百件或更多件。我怎樣才能做到這一點?

回答

1

我認爲這取決於你的SQL的味道。例如,Oracle在IN()列表中不允許超過1000個值。其他口味可能會有所不同。

1

一個替代辦法是插入這些ID對錶,然後做一個連接

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

它仍然是同樣的問題,你剛纔移動數組(IN)到插入命令。 – 2009-09-30 15:46:42

+0

你不能使用「in」做插入,但是你可以在一個事務中建立一批語句 – BlackTigerX 2009-09-30 15:48:00

+0

我會說,先測試一下,看看這個性能是否真的不好,我用「in」做了類似的select語句,而且性能足夠好,所以我不必嘗試其他替代方案 – BlackTigerX 2009-09-30 15:48:57

0

Oracle絕對允許在IN子句中有超過1000個項目。這是你的持久性工具,正在限制這一點。 iBatis或Hibernate,不管。使用Oracle Sqlplus,你會發現這不是Oracle限制。

Suggestion from BlackTigerX會工作,或者您可以多次調用查詢,一次傳遞1000個項目並彙總結果。無論哪種方式,你只是解決你的持久化工具的限制。

+0

不,它不是。 Oracle允許in子句中最多包含1000個值。 – Ben 2012-11-23 21:42:46