2010-08-28 54 views
2

我有這樣的代碼:需要幫助我查詢的WHERE子句優化這條SQL表達式


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

子查詢是在兩種情況下是相同的。也就是說,只要子查詢不爲空,我就想讓@PageID出現在子查詢中。有沒有辦法使用子查詢一次具有相同的效果?

感謝 康斯坦丁

回答

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