If statement SQL Server:if else On AND子句
我正在使用SQL Server,我遇到了需要根据if条件运行第一个and子句或第二个and子句的情况 请看下面的查询,我试图解释我的要求。我想在下面的查询中运行,但在where子句中我有2个和条件,其中一个需要基于@toRun变量运行,如下所示 如果@toRun等于“first”,则应运行1st和条件 否则将运行第二个和第二个条件。 有人能帮我怎么做吗?我试过if和case,但找不到方法If statement SQL Server:if else On AND子句,if-statement,sql-server-2012,If Statement,Sql Server 2012,我正在使用SQL Server,我遇到了需要根据if条件运行第一个and子句或第二个and子句的情况 请看下面的查询,我试图解释我的要求。我想在下面的查询中运行,但在where子句中我有2个和条件,其中一个需要基于@toRun变量运行,如下所示 如果@toRun等于“first”,则应运行1st和条件 否则将运行第二个和第二个条件。 有人能帮我怎么做吗?我试过if和case,但找不到方法 declare @toRun nvarchar(10) = 'first'; select * From
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的另一种方法
很酷的第一个例子真的是帮助充分感谢,但我不同意第二个例子,但是它在技术上是正确的,但它会使代码复制我不想做。高兴它帮助,@ OMLANEES -如果这个或任何答案已经解决了你的问题,请考虑点击检查标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。我完全同意第二个选项不是我自己会使用的方法,但是我编辑了我的原始答案并将其包括在内,以便您可以比较语法以供将来参考。
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)
)