Oracle 11g:当查询未返回任何内容时,默认为静态值

时间:2014-08-21 13:45:18

标签: sql oracle oracle11g

在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的奇怪用法,但我找不到它。有谁知道更好的方法吗?

2 个答案:

答案 0 :(得分:3)

您也可以使用聚合执行此操作:

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

答案 1 :(得分:2)

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

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