SQL: WHERE 子句中的 IF/CASE 语句
SQL: IF/CASE statement within WHERE clause
是否可以 return 记录匹配 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'
这显然 return 苹果、葡萄和梨。我的目标是只找到存在的苹果和葡萄,否则 return 绿色的水果。
我曾尝试参考这个类似的问题:SQL: IF clause within WHERE clause 但在合并 where 时遇到了问题。
我也试过使用 @@rowcount
:
select * from #Fruits where Fruit in ('Apple', 'Grapes')
if @@rowcount = 0
select * from #Fruits where Color = 'Green'
但是如果第一个 select return 什么都没有,结果它仍然 return 是一个空的 table。
谢谢。
我们可以使用并集表达您的逻辑:
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'));
是否可以 return 记录匹配 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'
这显然 return 苹果、葡萄和梨。我的目标是只找到存在的苹果和葡萄,否则 return 绿色的水果。
我曾尝试参考这个类似的问题:SQL: IF clause within WHERE clause 但在合并 where 时遇到了问题。
我也试过使用 @@rowcount
:
select * from #Fruits where Fruit in ('Apple', 'Grapes')
if @@rowcount = 0
select * from #Fruits where Color = 'Green'
但是如果第一个 select return 什么都没有,结果它仍然 return 是一个空的 table。
谢谢。
我们可以使用并集表达您的逻辑:
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'));