2

我有一個嵌套查詢的存儲過程,檢查主表中的「category」是否與子表中的「category」匹配。 所以可以有一個匹配或沒有。SQL Server:如果嵌套查詢有結果與否,如何返回是或否

有人可以告訴我如何返回是的,如果有匹配和子查詢返回的東西和否,如果沒有匹配和子查詢返回什麼都沒有?

我嘗試了下面的一般工作,但只有在匹配時纔會返回任何結果。

我的SQL(縮短):

SELECT  A.categoryID, 
      A.category, 
      A.[description], 
      (
       SELECT  'Yes' AS subscribed 
       FROM  MOC_Categories_Subscribers D 
       WHERE  D.category = A.category 
       FOR XML PATH(''), ELEMENTS, TYPE 
      ) 
FROM  MOC_Categories A 

與此的任何幫助,蒂姆非常感謝。

回答

3

如果子查詢沒有返回任何行,那麼結果將爲NULL。因此你需要檢查它。在SQL Server中,你可以通過使用功能ISNULLCOALESCE做到這一點,這取決於版本,您正在使用

SELECT A.categoryID, 
     A.category, 
     A.[description], 
     COALESCE((SELECT TOP 1 'Yes' 
       FROM MOC_Categories_Subscribers D 
       WHERE D.category = A.category), 'No') AS Result 
FROM MOC_Categories A 
+0

這很完美 - 正是我所期待的。非常感謝 ! – user2571510 2014-09-04 10:52:56

1
SELECT  A.categoryID, 
      A.category, 
      A.[description], 
      (
       SELECT  
       case 
        when count(subscribed) > 0 then 'Yes' 
        else 'No' 
       end 
       FROM  MOC_Categories_Subscribers D 
       WHERE  D.category = A.category 
      ) 
FROM  MOC_Categories A 
+0

感謝您的支持! – user2571510 2014-09-04 10:52:39

0

您可以使用outer join,如果沒有匹配,返回null值。結合case轉換爲是/否值:

SELECT A.categoryID, 
     A.category, 
     A.[description], 
     subscribed = CASE 
      WHEN D.category IS NOT NULL THEN 'Yes' 
      ELSE 'No' 
      END, 
FROM  MOC_Categories A 
LEFT OUTER JOIN MOC_Categories_Subscribers D 
    ON D.category = A.category 
+0

在這種情況下,查詢的語義將會不同。如果我們有一對多的關聯,則結果將會翻倍 – 2014-09-04 11:13:38

+0

正確,但OP在此情況下指定「one or none」。 – 2014-09-04 14:01:50

相關問題