SQL:WHERE子句中的IF / CASE语句

雪人

是否可以返回与where子句的第一部分匹配的记录;但是,如果未找到结果,则转到where子句的第二部分?

例:

create table #Fruits (
    Fruit varchar(20),
    Color varchar(20),
    Size varchar(20)
)

insert into #Fruits
values ('Apple', 'Red', 'Medium'),
       ('Pear', 'Green', 'Medium'),
       ('Banana', 'Yellow', 'Medium'),
       ('Grapes', 'Purple', 'Small')

select * from #Fruits
where Fruit in ('Apple', 'Grapes') or Color = 'Green'

这显然将返回苹果,葡萄和梨。我的目标是仅找到苹果和葡萄(如果存在),否则返回绿色的水果。

我试图引用这个类似的问题:SQL:WHERE子句中的IF子句,但是在合并where时遇到了麻烦。

我也尝试使用@@rowcount

select * from #Fruits where Fruit in ('Apple', 'Grapes')
if @@rowcount = 0
select * from #Fruits where Color = 'Green'

但是,如果第一个选择什么都不返回,则结果仍然返回一个空表。

谢谢。

蒂姆·比格莱森(Tim Biegeleisen)

我们可以使用联合来表达您的逻辑:

select * from #Fruits where Fruit in ('Apple', 'Grapes')
union all
select * from #Fruits where Color = 'Green' and
                            not exists (select 1 from #Fruits
                                        where Fruit in ('Apple', 'Grapes'));

我们也许还可以将逻辑组合成一个查询:

select *
from #Fruits
where
    Fruit in ('Apple', 'Grapes') or
    (Color = 'Green' and
     not exists (select 1 from #Fruits where Fruit in ('Apple', 'Grapes'));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章