【发布时间】:2018-07-30 13:52:09
【问题描述】:
所以我有一个简单的查询如下;
从联系人中选择姓名年龄>@age
我的问题是,我希望此查询始终返回一个值。如果没有结果,则假设 SQL 查询返回 ' '(空格)。
我在最后添加了一个 UNION SELECT;
SELECT Name FROM Contact WHERE Age > @age UNION SELECT ' '
但是,当有结果时,这也会添加空白记录。
【问题讨论】:
标签: sql
所以我有一个简单的查询如下;
从联系人中选择姓名年龄>@age
我的问题是,我希望此查询始终返回一个值。如果没有结果,则假设 SQL 查询返回 ' '(空格)。
我在最后添加了一个 UNION SELECT;
SELECT Name FROM Contact WHERE Age > @age UNION SELECT ' '
但是,当有结果时,这也会添加空白记录。
【问题讨论】:
标签: sql
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
这将检查结果集是否会返回,如果没有,请选择一个空格并命名字段年龄。
【讨论】:
我会在一个查询中完成所有这些操作:
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;
【讨论】: