2

J'ai une procédure stockée avec une requête imbriquée qui vérifie si "category" de la table principale correspond à "category" dans un sous-tableau. Il peut donc y avoir une correspondance ou aucune.SQL Server: Comment retourner Oui ou Non si la requête imbriquée a le résultat ou non

Quelqu'un peut-il me dire comment je peux retourner Oui s'il y a une correspondance et la sous-requête renvoie quelque chose et Non s'il n'y a pas de correspondance et la sous-requête ne renvoie rien?

J'ai essayé ce qui suit qui fonctionne en général mais seulement s'il y a correspondance car sinon cela ne retourne rien.

My SQL (raccourci):

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 

Un grand merci pour toute aide à cela, Tim.

Répondre

3

Si la sous-requête ne renvoie aucune ligne, votre résultat sera NULL. Ainsi, vous devez le vérifier. Dans SQL Server, vous pouvez le faire en utilisant les fonctions ISNULL et COALESCE, il dépend de la version que vous utilisez

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

C'est parfait - exactement ce que je cherchais. Merci beaucoup ! – user2571510

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

Merci pour cela aussi bien! – user2571510

0

Vous pouvez utiliser un outer join, qui retourne null valeurs s'il n'y a pas de correspondance. Combiner avec un case pour convertir en un oui/non valeur:

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

Dans ce cas, la sémantique de la requête sera différente. Si nous avons une association un à plusieurs, un résultat double –

+0

Vrai, mais l'OP a spécifié "un ou aucun" dans ce cas. –

Questions connexes