[英]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.