2011-08-02 105 views
0

我將大量產品收集到按行和項目命名獨特產品的數組中。然後我將它提供給我的SQL語句的WHERE子句。當產品列表變得相當大時,我的WHERE子句也會擴展到一個醜陋的混亂。那麼什麼我的WHERE子句可以像下面是一個例子:SQL(DB2)WHERE子句優化

WHERE FOO = 'Y' 
AND ((iline = ? AND iitem = ?) 
OR (iline = ? AND iitem = ?) 
OR ... 
OR (iline = ? AND iitem = ?)) 

等,其中每個 「?ILINE = AND的iItem =」是一種獨特的產品。很明顯,我並不是這方面的專家,但似乎在我的WHERE子句中偶爾會出現100多個OR,效率不高,我可能會以某種方式做得更好。

謝謝。

回答

0

我懷疑這是任何更有效的,但你可以使用一個case語句來代替:

WHERE 
    FOO = 'Y' 
    AND iline = CASE iitem 
       WHEN ? THEN ? 
       WHEN ? THEN ? 
       ... 
       END 
+0

那麼我會給它一個鏡頭,謝謝。 – Bead

1

你可以使用這樣的事情:

Presuming, iline has values like A,B,C,D,E.... and iitem posses 1,2,3,4,5... Now, you need combinations to be satisfied like 
(iline = 'A' AND iitem = '2'), 
(iline = 'E' AND iitem = '2'), 
(iline = 'B' AND iitem = '3'), 
(iline = 'A' AND iitem = '3'), 
(iline = 'E' AND iitem = '2'), 
(iline = 'B' AND iitem = '4') 

這大概可以擠

WHERE FOO = 'Y' 
AND (iline = 'A' and iitem IN ('2','3')) 
AND (iline = 'B' and iitem IN ('3','4')) 
AND (iline = 'E' and iitem IN ('2','3')) 

理想情況下,您需要添加:

  • 的,當你有ILINE
  • 另一個字面到現有條件的IN的條件。說,如果你要添加新條件(iline = 'B' and iitem = '5'),而不是增加新的或者,你可以簡單地添加文字「5」現有ILINE =「B」狀態像(iline = 'B' and iitem IN ('3','4','5'))

希望我做我的概念清晰,請讓我知道你的問題。

+0

我同意,那是我認爲的更好。 –