SQL(DB2)WHERE子句优化

SQL(DB2)WHERE子句优化,sql,db2,where-clause,Sql,Db2,Where Clause,我将大量产品列表收集到一个数组中,按行和项命名一个独特的产品。然后我将其输入到SQL语句的WHERE子句中。当这个产品列表变得相当大时,我的WHERE子句也会扩展到一个丑陋的混乱状态。下面是我的WHERE子句的示例: WHERE FOO = 'Y' AND ((iline = ? AND iitem = ? ) OR (iline = ? AND iitem = ? ) OR ... OR (iline = ? AND iitem = ? )) 以此类推,其中每个“iline=?

我将大量产品列表收集到一个数组中,按行和项命名一个独特的产品。然后我将其输入到SQL语句的WHERE子句中。当这个产品列表变得相当大时,我的WHERE子句也会扩展到一个丑陋的混乱状态。下面是我的WHERE子句的示例:

 WHERE FOO = 'Y'
 AND ((iline = ? AND iitem = ? )
 OR (iline = ? AND iitem = ? ) 
 OR ... 
 OR (iline = ? AND iitem = ? ))
以此类推,其中每个“iline=?和iitem=?”都是唯一的产品。很明显,我不是这方面的专家,但我的WHERE子句中偶尔出现100+OR似乎不是很有效,我可以做得更好


谢谢。

我怀疑它是否更有效,但您可以使用案例陈述:

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

您可以使用以下内容:

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上有一个条件时
  • 现有条件中的另一个文本。假设您必须添加一个新的条件
    (iline='B'和iitem='5')
    ,而不是添加一个新的OR,您可以简单地向现有的iline='B'条件添加一个文本“5”,如
    (iline='B'和iitem IN('3','4','5'))

希望我把概念讲清楚,请让我知道你的问题。

我同意,这比我想的要好。