繁体   English   中英

具有IN语法的条件WHERE子句

[英]Conditional WHERE clause with IN syntax

我需要使用条件WHERE子句编写SQL查询。 我的整个查询如下所示:

SELECT XXX
FROM table1 TBL 
JOIN table2 TBL2 ON TBL.Id = TBL2.TBL_Id 
WHERE TBL.Id = IIF(@variable IS NULL, Id, @variable )
AND TBL.Id IN( IIF(@tmp = 1, (SELECT Id FROM @tmpTable), Id))

我想达到的是

如果@tmp为1,则从@tmpTable中选择所有ID,否则选择全部(等同于删除整行)

以下条件正常(无IN部分)

TBL.Id = IIF(@variable IS NULL, Id, @variable)

但与IN部分相同的东西无法正常工作

TBL.Id IN( IIF(@tmp = 1, (SELECT Id FROM @tmpTable), Id))

它总是写一个错误:

子查询返回的值超过1。 当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

任何想法,我在做什么错? 谢谢

您可以使用OR而不是IIF重写条件:

SELECT XXX
FROM table1 TBL 
JOIN table2 TBL2 ON TBL.Id = TBL2.TBL_Id 
WHERE (@variable IS NULL AND TBL.Id = Id) 
   OR ((@tmp = 1 AND TBL.Id IN(SELECT Id FROM @tmpTable))
        OR TBL.Id = Id)

我会做这样的事情;

SELECT XXX
FROM table1 TBL
JOIN table2 TBL2 
    ON TBL.Id = TBL2.TBL_Id
WHERE (@variable IS NULL AND TBL.Id = Id)
    OR (@tmp = 1 AND TBL.Id IN (SELECT Id FROM @tmpTable))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM