Oracle - where 子句中的案例
Posted
技术标签:
【中文标题】Oracle - where 子句中的案例【英文标题】:Oracle - Case in where clause 【发布时间】:2014-01-22 13:09:04 【问题描述】:我正在尝试在 Oracle 数据库中执行查询。查询在 where 子句中有 case 构造。
where
sale.op = 2 and
case when (:stat = -11) then (sale.type_id = 27 or sale.type_id = 28 or sale.type_id = 29)
else
(sale.type_id = 27)
end
但我收到以下错误:
ORA-00907:缺少右括号。
在 Derby SQL 中这是有效的。有人可以帮助我吗? 谢谢。
【问题讨论】:
CASE 评估条件并返回一个expression
,需要使用运算符对某个值/列进行评估。
【参考方案1】:
where sale.op = 2
and ( (:stat = -11 and sale.type_id in (27, 28, 29))
or (:stat <> -11 and sale.type_id = 27)
)
【讨论】:
【参考方案2】:您也可以尝试不使用 CASE,使用简单的运算符 AND 和 OR:
where
sale.op = 2 and ((:stat = -11 and (sale.type_id = 27 or sale.type_id = 28 or sale.type_id = 29))
OR (:stat <> -11 and sale.type_id = 27))
【讨论】:
【参考方案3】:试试这个查询:
where
sale.op = 2 and
((:stat = -11 and (sale.type_id = 27 or sale.type_id = 28 or sale.type_id = 29))
or (:stat <> -11 and sale.type_id = 27))
【讨论】:
【参考方案4】:试试这个查询
where
sale.op =2 and
((:stat = -11 and sale.type_id=any(27,28,29)) or
(:stat <> -11 and sale.type_id = 27))
看起来更清晰了!!!
【讨论】:
以上是关于Oracle - where 子句中的案例的主要内容,如果未能解决你的问题,请参考以下文章