选择另一个语句如果没有返回Oracle的行

时间:2017-05-07 19:07:49

标签: sql oracle

我在SQL上很弱。我有一个包含3列和基本选择语句的小表。

    select intl, loc FROM test_table where p.country = 'UAE'

但在某些情况下没有返回任何行,在这种情况下我想从同一个表中选择另一个语句。

我找到了以下查询,但我无法让它工作。

    select intl, loc FROM test_table
    where p.country = 'UAE'
    union all
    select 'intl','Loc' from dual 
    where not exists ( select intl, loc FROM test_table where p.country = 'Other' )

我知道它很简单,但我被困了好几个小时。 感谢名单

2 个答案:

答案 0 :(得分:1)

您似乎想要的查询是:

select intl, loc 
from test_table
where p.country = 'UAE'
union all
select 'intl', 'Loc' from dual 
where not exists ( select intl, loc from test_table where p.country = 'UAE' );

NOT EXISTS的国家/地区应与原始查询中的国家/地区相同。

答案 1 :(得分:0)

如果我理解你的要求,可能会采用一种不同的方法:

SELECT intl, loc from test_table WHERE p.country = 
(CASE WHEN (SELECT intl FROM test_table WHERE p.country='UAE' AND ROWNUM=1) IS NOT NULL THEN 'UAE' 
ELSE 'Other' END);

看起来您想要使用WHERE p.country =中的一个值或另一个值。因此,此CASE确定使用第一个p.country值进行选择是否会返回某些内容(我们必须使用ROWNUM=1限制结果才能获得一个结果,否则情况将无效 - 它需要一个WHEN之后的价值。如果是(IS NOT NULL),那么我们会在WHERE中使用该值,否则我们会使用ELSE之后指定的其他值。