SQL(DB2) WHERE子句优化



我将一个大的产品列表收集到一个数组中,该数组按行和项命名一个唯一的产品。然后我把它提供给我的SQL语句的WHERE子句。当这个产品列表变得相当大时,我的WHERE子句也会扩展成一团乱糟糟的东西。下面是WHERE子句的示例:

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

等等,其中每个" line = ?AND iitem = ?"是唯一的产品。很明显,我不是这方面的专家,但在我的WHERE子句中偶尔有100+ or似乎不是很有效,我可以做得更好。

谢谢。

你可以这样写:

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'))

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

  • 当您在线上有条件时,使用AND
  • 现有条件IN的另一个文字。假设您必须添加一个新条件(iline = 'B' and iitem = '5'),而不是添加一个新的OR,您可以简单地向现有的line = 'B'条件(如(iline = 'B' and iitem IN ('3','4','5'))
  • )添加一个文字'5'。

希望我讲清楚了我的概念,有什么问题请告诉我

我怀疑它是否更有效,但您可以使用case语句:

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

最新更新