21

在简单查询中是否有任何方法可以使用 SQL EXISTS 语句返回布尔值而不使用 WHERE 子句?

所有 2008 R2 SQL Server 联机丛书示例都显示了另一个 WHERE 子句和两个表。网站示例显示过程中的 WHERE 或 IF-THEN-ELSE。

我希望在一张桌子上做以下事情:

EXISTS
(SELECT  cx.id
 FROM fdd.admissions_view as cx  
 WHERE cx.id=1111 and cx.campus='MEXI') 

SELECT 语句工作正常并返回 ID。我只想添加 EXISTS 以返回 BOOLEAN,但上面的语法无效。

我可以做这样的事情吗?如果是这样,我在语法方面缺少什么?如果不是,还有什么其他技术可以工作?

请指教。谢谢。

4

5 回答 5

18

这是一个使用EXISTSwith 的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:

于 2016-11-15T17:44:28.403 回答
16

像这样的东西怎么样

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'

?

于 2012-06-15T00:48:34.677 回答
12

不完全确定您所说的“返回”是什么意思,但这里有一些想法。

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
于 2012-06-15T00:33:37.303 回答
6

问题是这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's as good as anything else
    FROM fdd.admissions_view as cx  
    WHERE cx.id=1111 and cx.campus='MEXI')
  then 1 else 0 end
于 2012-06-15T01:33:30.557 回答
0

根据 ryenus 的回答,一个在 MS SQL Server 上返回位结果的解决方案:

select 
    cast(
        case when exists
            (select id from fdd.admissions_view where id=1111 and campus = 'MEXI') 
        then 1 
        else 0 
        end 
    as bit) as Result

如果没有强制转换,这将返回一个 int 结果。

于 2021-06-27T02:28:32.843 回答