【问题标题】:Oracle 11g: Default to static value when query returns nothingOracle 11g:查询不返回任何内容时默认为静态值
【发布时间】:2014-08-21 13:45:18
【问题描述】:

在 Oracle 11g 中工作时,我需要在输入值存在于表中时选择与输入值相对应的数据,而在不存在时选择静态默认值。我能找到的最好的方法是写这样的东西:

SELECT desired_datum
FROM (
    --Try to get explicit datum
    SELECT desired_datum, 1 AS was_found
    FROM data_table
    WHERE the_key = &input_value
    UNION
    --Get default datum
    SELECT 'default' AS desired_datum, 0 AS was_found
    FROM dual
    --Put explicit datum on top, if it exists
    ORDER BY was_found DESC
) finder
WHERE ROWNUM <=1;

似乎必须有一些惯用的方法来做到这一点,它不依赖于ORDER BY 的这种奇怪用法,但我找不到它。有谁知道更好的方法吗?

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您也可以通过聚合来做到这一点:

    SELECT COALESCE(MAX(desired_datum), 'default')
    FROM data_table
    WHERE the_key = &input_value
    

    【讨论】:

      【解决方案2】:

      这应该是你所做的更简单的版本:

      SELECT NVL(desired_datum, 'default') AS desired_datum
      FROM DUAL LEFT JOIN  data_table ON the_key = &input_value
      

      【讨论】:

        猜你喜欢
        • 2012-04-14
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        • 2013-09-10
        • 1970-01-01
        相关资源
        最近更新 更多