我想执行此查询
select * from locations where region=1 or region=2
但在某些情况下我不想在WHERE(or region=2
)中包含第二个子句
有条件运行or语句吗?
答案 0 :(得分:2)
检查where语句中的条件
select * from locations
where region=1
or (region=2 and @checkRegion2=1)
答案 1 :(得分:2)
如果你想要genralizable查询,你可以为此声明表变量(假设你使用的是SQL服务器):
declare @regions table (id int primary key)
然后根据条件填写它:
insert into @regions select 1
if @use2 = 1
insert into @regions select 2
现在您可以运行此查询:
select *
from location as l
where exists (select * from @regions as r where r.id = l.region)
或
select *
from location as l
where l.region in (select r.id from @regions as r)
答案 2 :(得分:0)
DECLARE @RUNAFTERBIT VARCHAR(10)
SET @RUNAFTERBIT = 'TRUE'
IF @RUNAFTERBIT = 'TRUE'
SELECT * FROM LOCATIONS WHERE REGION = 1 OR REGION = 2
ELSE
SELECT * FROM LOCATIONS WHERE REGION = 1
END IF
答案 3 :(得分:0)
您可以使用动态SQL:
DECLARE @Query VARCHAR(MAX) = 'SELECT * FROM locations WHERE region=1 '
IF(@RUNAFTERBIT = 'TRUE')
BEGIN
SET @Query = @Query + ' OR REGION = 2'
END
EXEC(@Query)
答案 4 :(得分:0)
在某些情况下,CASE
表达式可用于执行短路评估:
declare @AlternateRegion as Int = 2;
select *
from Locations
where case
when Region = 1 then 1
when @AlternateRegion is not NULL then
case when Region = @AlternateRegion then 1 else 0 end
else 0
end = 1
在存在聚合函数时, CASE
无法可靠地提供短路评估。请参阅CASE / COALESCE won't always evaluate in textual order
和Aggregates Don't Follow the Semantics Of CASE
。