2

У меня есть хранимая процедура с вложенным запросом, который проверяет, соответствует ли «category» из главной таблицы «category» в подзадаче. Таким образом, может быть одно совпадение или нет.SQL Server: Как вернуть Да или Нет, если результат вложенного запроса получен или нет

Может ли кто-нибудь сказать мне, как я могу вернуться Да, если есть совпадение, а подзапрос возвращает что-то, а Нет, если нет совпадения, а подзаголовок ничего не возвращает?

Я пробовал следующее, которое работает вообще, но только если есть совпадение, так как иначе ничего не возвращает.

My 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 вы можете сделать это с помощью функций ISNULL и COALESCE, это зависит от версии, что вы используете

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

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

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

В этом случае семантика запроса будет отличаться. Если у нас есть одна ассоциация, результат будет удваиваться. –

+0

Правда, но в этом случае ОП указывает «один или нет». –

 Смежные вопросы

  • Нет связанных вопросов^_^