需要帮助优化这个sql表达式

时间:2010-08-28 19:45:27

标签: sql-server-2005

在我的查询的WHERE子句中,我有这段代码:


...
where @PageID in (...subquery...) or not exists(...subquery...)
...

其中子查询在两种情况下都相同。也就是说,只有当子查询不为空时,我才希望@PageID出现在子查询中。有没有办法使用子查询一次具有相同的效果?

感谢 康斯坦丁

1 个答案:

答案 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