Необходимость BOOLEAN Результат из SQL EXISTS Statement без использования предложения WHERE
Есть ли способ в простом запросе вернуть логическое значение с помощью инструкции SQL EXISTS без использования предложения WHERE?
Во всех примерах электронной документации по SQL Server 2008 2008 R2 показано другое предложение WHERE и две таблицы. Примеры веб-сайтов показывают процедуру WHERE или IF-THEN-ELSE в процедуре.
Я надеялся сделать следующее на одном столе:
EXISTS
(SELECT cx.id
FROM fdd.admissions_view as cx
WHERE cx.id=1111 and cx.campus='MEXI')
Оператор SELECT отлично работает и возвращает идентификатор. Я просто хочу добавить EXISTS, чтобы вернуть BOOLEAN, но приведенный выше синтаксис недействителен.
Могу ли я сделать что-то вроде этого? Если да, то что мне не хватает по синтаксису? Если нет, то какой другой метод может работать?
Просьба сообщить. Благодарю.
Ответы
Ответ 1
Не совсем уверен, что вы подразумеваете под "возвратом", но вот некоторые идеи.
DECLARE @return BIT = 0;
IF EXISTS( SELECT cx.id
FROM fdd.admissions_view as cx
WHERE cx.id=1111 and cx.campus='MEXI' ) SET @return = 1;
Или:
IF EXISTS( SELECT cx.id
FROM fdd.admissions_view as cx
WHERE cx.id=1111 and cx.campus='MEXI' ) SELECT 1 AS returnValue
Ответ 2
Как насчет чего-то вроде
select case when count(cx.id) > 0 then 1 else 0 end
FROM fdd.admissions_view as cx
WHERE cx.id=1111 and cx.campus='MEXI'
?
Ответ 3
Вот пример, который использует EXISTS
с CASE WHEN ... THEN .. ELSE ... END
, проверенный с MySQL и Oracle:
SELECT
CASE WHEN EXISTS
(SELECT cx.id
FROM fdd.admissions_view as cx
WHERE cx.id=1111 and cx.campus='MEXI')
THEN 1
ELSE 0
END
FROM DUAL
Обновление:
Найдено некоторые связанные Q/A:
Ответ 4
Проблема заключается в том, что EXISTS
является допустимым синтаксисом в некоторых конструкциях грамматики. Мне не известны формальные правила (это означает, что я должен идти RTFM: -?), Но EXISTS
можно обернуть в case
, который будет работать при использовании в качестве выражения:
set @r = case when exists (...) then 1 else 0 end
return case when exists (...) then 1 else 0 end
например.
return case when exists (SELECT 1 -- because it as good as anything else
FROM fdd.admissions_view as cx
WHERE cx.id=1111 and cx.campus='MEXI')
then 1 else 0 end