首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL(DB2) WHERE子句优化

SQL(DB2) WHERE子句优化
EN

Stack Overflow用户
提问于 2011-08-03 07:22:37
回答 2查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
 WHERE FOO = 'Y'
 AND ((iline = ? AND iitem = ? )
 OR (iline = ? AND iitem = ? ) 
 OR ... 
 OR (iline = ? AND iitem = ? ))

依此类推,其中每个"iline = ?“和”iitem =?“是一种独特的产品。显然我不是这方面的专家,但是在我的WHERE子句中偶尔使用100+ OR似乎效率不是很高,我可以以某种方式做得更好。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-03 07:37:10

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

代码语言:javascript
复制
WHERE 
  FOO = 'Y'
  AND iline = CASE iitem
                WHEN ? THEN ?
                WHEN ? THEN ?
                ...
              END
票数 0
EN

Stack Overflow用户

发布于 2011-08-04 02:18:08

你可以使用类似这样的东西:

代码语言:javascript
复制
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')

这可能会挤到

代码语言:javascript
复制
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上有一个条件时,

  • An和另一个文字到现有条件的IN
  • 。比方说,如果您必须添加一个新的条件行,而不是添加一个新的OR,您可以简单地将文字'5‘添加到现有的iline = 'B’条件,如(iline = 'B' and iitem IN ('3','4','5'))

(iline = 'B' and iitem = '5')

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6919906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档