我需要用条件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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
任何想法,我做错了什么?感谢
答案 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))