在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,但我找不到它。有谁知道更好的方法吗?
ORDER BY
这应该是您所做的工作的简单版本:
SELECT NVL(desired_datum, 'default') AS desired_datum FROM DUAL LEFT JOIN data_table ON the_key = &input_value