我在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' )
我知道它很简单,但我被困了好几个小时。 感谢名单
答案 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
之后指定的其他值。