我正在使用SQL Server,我被困在我需要基于if
条件运行第一个AND
子句或第二个AND
子句的条件下。
请参阅下面的查询,我试图解释我的要求。我想运行下面的查询,但在where
子句中,我有两个AND
条件,其中一个需要基于@toRun
变量运行,如下所示;
- 如果
@toRun
等于'first',则第一个AND
条件应运行 Else第二个
AND
条件将运行。有没有人可以帮助我如何做到这一点,我已经尝试了if
和case
,但找不到一种方法来做到这一点。
declare @toRun nvarchar(10) = 'first';
select *
From tbl_data
where isDeleted=0
--if @toRun is equal to 'first' then following clause should run
--1st Clause:
AND FID in (select FID from t1)
--if toRun is not equal to 'first' then following clause should run
--2nd Clause:
AND TID in (select TID from t1)
试试这个:添加两个条件,但使用OR子句和一些额外的括号可以帮助您运行一个或另一个。
declare @toRun nvarchar(10) = 'first';
select *
From tbl_data
where
isDeleted=0 AND
(
(@toRun = 'first' AND FID IN (SELECT FID FROM T1)) OR
(@ToRun != 'first' AND TID IN (SELECT TID FROM T1))
)
如果将来真的需要使用IF
语句做一些事情(在这种情况下,我真的认为没有必要),您的语法将如下:
declare @toRun nvarchar(10) = 'first';
IF @toRun = 'first'
BEGIN
select *
From tbl_data
where
isDeleted=0 AND
FID IN (SELECT FID FROM T1)
END
IF @toRun != 'first'
BEGIN
select *
From tbl_data
where
isDeleted=0 AND
TID IN (SELECT TID FROM T1)
END
这是使用EXISTS
的另一种方法
DECLARE @ToRun nvarchar(10) = 'first';
SELECT *
FROM tbl_data t
WHERE isDeleted = 0 AND
EXISTS (SELECT 1 FROM t1
WHERE (@ToRun = 'first' AND t.FID = t1.FID) OR
(@ToRun <> 'first' AND t.TID = t1.TID)
)