带有IN语法的条件WHERE子句

时间:2016-06-22 08:06:42

标签: sql sql-server tsql

我需要用条件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,否则选择all(相当于删除整行)

以下条件正在运作(没有IN部分)

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

但IN部分的相同内容无法正常工作

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

它总是写错误:

  

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用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)

答案 1 :(得分:3)

我会做这样的事情;

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