2014-09-01 79 views
1

什麼是DB2中謂詞WHERE IN的上限。謂詞WHERE IN()db2的上限是多少?

例如:

從員工工資中選擇其中EMPID在(1,2,3,4 ... N)

+1

據我所知,在DB2(LUW)的SQL語句可以達到約2 MIB,所以你可以在原則上有某處的IN子句中250K條款的區域,允許每學期8個字符,包括逗號。 OTOH,你真的不應該利用這一點。 – 2014-09-01 06:32:34

+0

此外,如果任何答案甚至可能,則需要定義「上限」。如果它的意思是「最大數值」,答案可能與「謂詞的最大長度」不同。您可能一次有一千個CHAR(3)值,另一次可能有一百個CHAR(30)值,並獲得不同的結果。 – user2338816 2014-09-05 08:13:08

回答

2

有時候,如果你要問的問題,你可能會關於它的錯誤方法:-)

如果您擔心限制,請考慮將值放入臨時表中,然後加入表中以獲得結果。

至於具體的限制,這幾乎肯定會因您使用的DB2而異:LUW,z/OS,iSeries等等。它也可能因版本而異。我在網上看到關於DB2拒絕超過一千個條目的問題,但至於哪個平臺/版本,我不能說。

你最好的選擇可能是簡單地測試你使用的任何版本,看看你什麼時候達到極限。 IBM通常並不傾向於發佈這樣的限制,相反,假設你會做出明智的事情並避免太多(尤其是因爲優化引擎幾乎不可能爲任意值選擇合適的執行路徑)。

+0

從Oracle組未標記。 – user3492304 2014-09-01 06:30:24

+1

我只想知道DB2中IN謂詞的最大限制。我對像臨時表等可能的解決方案不感興趣,因爲我們已經想到所有這些替代方案:) – user3492304 2014-09-01 06:32:40

+0

@ user3492304:那麼你需要規範的_first_事情是哪個平臺和哪個版本。然後進入IBM的doc站點並獲取相關的PDF。如果它不在那裏,IBM不會說。作爲在Software Group工作的人員,我知道IBM除非絕對必要,否則不會指定限制 - 否則會限制其行爲自由。如果他們發佈它,我會吃我的午餐:-) – paxdiablo 2014-09-01 06:43:06

0

的AS/400極限是1000左右,基於錯誤,我們得到當我們超過那個。我們正在分解成多個較小的查詢來修補我們的傳統JEE應用程序。

0

當達到in子句的限制時使用連接語句。這對所有意圖和目的都沒有限制。

select salary from employee join mytable on empid = id.