【问题标题】:SQL return result on empty query空查询的 SQL 返回结果
【发布时间】:2018-07-30 13:52:09
【问题描述】:

所以我有一个简单的查询如下;

从联系人中选择姓名年龄>@age

我的问题是,我希望此查询始终返回一个值。如果没有结果,则假设 SQL 查询返回 ' '(空格)。

我在最后添加了一个 UNION SELECT;

SELECT Name FROM Contact WHERE Age > @age UNION SELECT ' '

但是,当有结果时,这也会添加空白记录。

【问题讨论】:

    标签: sql


    【解决方案1】:
    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
    

    这将检查结果集是否会返回,如果没有,请选择一个空格并命名字段年龄。

    【讨论】:

    • 您的建议有效,谢谢!你认为有没有办法不使用 if else 语句?
    • @0014 你还有什么其他限制?
    • 其他限制是什么意思?没有其他限制。
    • 所以你唯一的限制就是不能使用if/else?
    • 是的,但这是最干净的方式。我能想到的其他方式会很混乱。
    【解决方案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;
    

    【讨论】:

    • 完美答案!这就是我真正想要的。
    • @0014 。 . .如果这是您的首选答案,那么您应该接受它。
    • 我没有指定我正在寻找我的问题中的单个查询。所以我选择的答案是值得选择的。但只是因为他回答问题的速度比你快……
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2011-04-11
    • 2021-03-18
    • 2021-11-20
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多