【问题标题】:Oracle 12c - conditional whereOracle 12c - 有条件的 where
【发布时间】:2018-08-13 23:03:04
【问题描述】:

我有一个这样的查询:

            SELECT COUNT(*) 
              INTO v_count 
              FROM some_table 
             WHERE some_column = v_some_data
               AND other_col = v_other_data

我只想在v_other_date != 'A' 时使用子句“AND other_col = v_other_data”。

这是最好的方法吗?

        SELECT COUNT(*) 
          INTO v_count 
          FROM some_table 
         WHERE some_column = v_some_data
           AND other_col = case when v_other_data = 'A'
                                then other_col
                                else v_other_date
                           end

【问题讨论】:

    标签: sql oracle oracle12c


    【解决方案1】:

    不要在where 子句中使用case。你总是可以用布尔逻辑替换它

    WHERE some_column = v_some_data
    AND (v_other_date = 'A' OR other_col = v_other_data)
    

    【讨论】:

    • where 子句中不使用case 是否有特殊原因?
    • 并非如此,但许多用户似乎在正确应用它时遇到问题,而且 IMO 布尔逻辑看起来比 case 更容易阅读。
    • 在你的解决方案中我们不能只有v_other_date = 'A' OR other_col = v_other_data,因为如果v_other_date = 'A' 是假的(不等于)那么我们不需要再次检查它?
    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    相关资源
    最近更新 更多