SQL(DB2)WHERE子句优化
我将大量产品列表收集到一个数组中,按行和项命名一个独特的产品。然后我将其输入到SQL语句的WHERE子句中。当这个产品列表变得相当大时,我的WHERE子句也会扩展到一个丑陋的混乱状态。下面是我的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=?
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上有一个条件时
- 现有条件中的另一个文本。假设您必须添加一个新的条件
,而不是添加一个新的OR,您可以简单地向现有的iline='B'条件添加一个文本“5”,如(iline='B'和iitem='5')
(iline='B'和iitem IN('3','4','5'))
希望我把概念讲清楚,请让我知道你的问题。我同意,这比我想的要好。