SQL Server: if else On AND Clause



我正在使用SQL Server,我被困在我需要基于if条件运行第一个AND子句或第二个AND子句的条件下。

请参阅下面的查询,我试图解释我的要求。我想运行下面的查询,但在where子句中,我有两个AND条件,其中一个需要基于@toRun变量运行,如下所示;

  • 如果@toRun等于'first',则第一个AND条件应运行
  • Else第二个AND条件将运行。

有没有人可以帮助我如何做到这一点,我已经尝试了ifcase,但找不到一种方法来做到这一点。

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)
             )

最新更新