我将一个大的产品列表收集到一个数组中,该数组按行和项命名一个唯一的产品。然后我把它提供给我的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