【问题标题】:Oracle - Case in where clauseOracle - where 子句中的案例
【发布时间】: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,需要使用运算符对某个值/列进行评估。

标签: sql oracle case where


【解决方案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))
        

        看起来更清晰了!!!

        【讨论】:

          猜你喜欢
          • 2013-07-09
          • 2019-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多