2011-08-02 83 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

我同意,那是我认为的更好。 –