一尘不染

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

sql

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


阅读 106

收藏
2021-03-10

共1个答案

一尘不染

这应该是您所做的工作的简单版本:

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