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 子句中的案例的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:`(+)` 在 WHERE 子句中的作用是啥?

where 子句 oracle 中的 case 语句

oracle中where子句和having子句中的区别

oracle中where 子句和having子句中的区别

在 where 子句中的 Oracle 集合

在 where 子句问题中的 Oracle 日期比较