在使用PL / SQL的Oracle 11g引擎上 我有像这样运行的逻辑
if (flag = Y) then
select id, flavor, color
from menu
where flavor in (1,2,3,4,5);
else
select
id, flavor, color
from
menu
where flavor in (2,4,6);
end if;
我在考虑在 where 子句中使用解码或案例逻辑?我想只有一个可以处理'flag'值的查询。
答案 0 :(得分:4)
您可以将其更改为使用OR吗? (假设如果不是Y则标记为N,但可以为NULL,将其视为N)
select
id, flavor, color
from
menu
where
(flag = 'Y' and flavor in (1,2,3,4,5))
or(nvl(flag,'N') = 'N' and flavor in (2,4,6)) ;
如果你想检查标志<> Y(以与@Crappy Coding Guy类似的方式发布,但它可以为NULL,更改
nvl(flag,'N')='N'
到
nvl(:flag,'N')<> 'Y'
就足够了
答案 1 :(得分:1)
Oracle中的逻辑运算符和比较运算符可能略有不同,但是这样的事情应该可以解决问题。
select id, flavor, color
from menu
where (flag = Y and flavor in (1, 2, 3, 4, 5))
or (flag != Y and flavor in (2, 4, 6)