我将一个很大的产品列表收集到一个数组中,该数组按行和项命名一个唯一的产品。然后我将其提供给我的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似乎效率不是很高,我可以以某种方式做得更好。
谢谢。
发布于 2011-08-03 07:37:10
我怀疑它是否更有效,但您可以使用case语句来代替:
WHERE
FOO = 'Y'
AND iline = CASE iitem
WHEN ? THEN ?
WHEN ? THEN ?
...
END发布于 2011-08-04 02:18:08
你可以使用类似这样的东西:
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' and iitem IN ('3','4','5')) (iline = 'B' and iitem = '5')
希望我说清楚了我的概念,请让我知道你的问题。
https://stackoverflow.com/questions/6919906
复制相似问题