所以我有一个简单的查询,如下所示;
从联系人的年龄中选择姓名> @age
我的问题是,我希望此查询始终返回一个值。如果没有结果,则SQL查询应该返回''(空白)。
我在末尾添加了UNION SELECT;
从联系人的年龄中选择姓名> @age UNION SELECT''
但是,这还会在有结果时添加空白记录。
答案 0 :(得分:2)
IF NOT EXISTS(SELECT Name FROM Contact WHERE Age > @age)
BEGIN
SELECT '' AS age
END
ELSE
BEGIN
SELECT Name FROM Contact WHERE Age > @age
END
这将检查结果集是否将返回,如果没有返回结果,请选择空白并命名字段年龄。
答案 1 :(得分:2)
我将在一个查询中完成所有操作:
select name
from contacts
where age > @age
union all
select v.name
from (values ('')) v.name
where not exists (select 1 from contacts where age > @age);
或使用CTE:
with t as (
select name
from contacts
where age > @age
)
select t.*
from t
union all
select v.name
from (values ('')) v(name)
where not exists (select 1 from t);
或者,使用left join
的有趣方式:
select coalesce(c.name, v.name) as name
from (values ('')) v(name) left join
contacts c
on c.age > @age;