在我的查询的WHERE子句中,我有这段代码:
...
where @PageID in (...subquery...) or not exists(...subquery...)
...
其中子查询在两种情况下都相同。也就是说,只有当子查询不为空时,我才希望@PageID出现在子查询中。有没有办法使用子查询一次具有相同的效果?
感谢 康斯坦丁
答案 0 :(得分:1)
假设您当前的查询是这样的
DECLARE @PageID INT = -100
SELECT *
FROM sys.objects
WHERE @PageID IN (SELECT number FROM master.dbo.spt_values)
OR NOT EXISTS(SELECT number FROM master.dbo.spt_values)
我认为这是等价的
SELECT *
FROM sys.objects
WHERE
ISNULL((SELECT MIN(CASE WHEN number = @PageID THEN 0 ELSE 1 END)
FROM dbo.spt_values),0)=0