Oracle 11g:查询不返回任何内容时默认为静态值
Posted
技术标签:
【中文标题】Oracle 11g:查询不返回任何内容时默认为静态值【英文标题】:Oracle 11g: Default to static value when query returns nothing 【发布时间】: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
的这种奇怪用法,但我找不到它。有谁知道更好的方法吗?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Oracle 11g:查询不返回任何内容时默认为静态值的主要内容,如果未能解决你的问题,请参考以下文章