2016-06-07 59 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

相关问题