2016-06-07 103 views
-1

我想排除那些有UserID作爲NULL的記錄,只有至少有一個記錄中有一個值。SQL Server根據特定條件進行選擇

IF EXISTS (SELECT * FROM @MySavedSearches WHERE UserID IS NOT NULL) 
    SELECT SSM.* 
    FROM XYZTABLE SSM 
    JOIN @MySavedSearches MySearches ON SSM.UniqueID = MySearches.UniqueID AND MySearches.UserID IS NOT NULL 
ELSE 
    SELECT SSM.* 
    FROM XYZTABLE SSM 
    JOIN @MySavedSearches MySearches ON SSM.UniqueID = MySearches.UniqueID 

以上查詢我能夠得到所需的結果,但不知何故,我覺得它不是正確的方式。

+0

你可以把它們都放在一個查詢,而無需的加入'和'部分通過使用WHERE子句。例如WHERE CASE WHEN EXISTS(SELECT 1 FROM @MySavedSearches WHERE UserID IS NOT NULL)THEN MySearches.UserID ELSE 1 END IS NOT NULL'。這只是說,「如果它存在,它不應該是空的,如果它不存在,抓住一切。」要想找到「正確」的方式,只需測試不同的方法,並找出哪些方法執行得最快,我想。 – ZLK

+0

你的問題已解決? –

+0

無論我在問題發佈的代碼是否正常工作。我只想知道其他更好的選擇。 – Raghuveer

回答

2

獲取計數的變量,並檢查其中內:

DECLARE @cnt int 
SELECT @cnt = count(*) FROM @MySavedSearches WHERE UserID IS NOT NULL 

SELECT SSM.* 
    FROM XYZTABLE SSM 
    JOIN @MySavedSearches MySearches ON SSM.UniqueID = MySearches.UniqueID 
      AND ((@cnt > 0 AND MySearches.UserID IS NOT NULL) OR (@cnt = 0)) 
+0

+1感謝這個解決方案,這比我的好一點。但我仍在尋找更好的方法 – Raghuveer

相關問題