需要BOOLEAN结果来自SQL EXISTS语句而不使用WHERE子句

bla*_*son 17 t-sql sql-server exists

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

所有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') 
Run Code Online (Sandbox Code Playgroud)

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

我可以这样做吗?如果是这样,我在语法方面缺少什么?如果没有,还有什么其他技术可行?

请指教.谢谢.

500*_*ror 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'
Run Code Online (Sandbox Code Playgroud)

  • @pst我不认为你应该期待优化,或者在某些情况下即使你观察它(或者认为你观察它)也要依赖它.我认为EXISTS总是不会比COUNT差,但往往更好.因此,除非实际计数相关,否则我每次都会选择EXISTS. (4认同)

rye*_*nus 13

这里是一个它采用EXISTSCASE 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
Run Code Online (Sandbox Code Playgroud)

更新:

找到一些相关的Q/A:


Thi*_*iff 11

不完全确定你的意思是"回归",但这里有一些想法.

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;
Run Code Online (Sandbox Code Playgroud)

要么:

IF EXISTS( SELECT  cx.id
    FROM fdd.admissions_view as cx  
    WHERE cx.id=1111 and cx.campus='MEXI' ) SELECT 1 AS returnValue
Run Code Online (Sandbox Code Playgroud)


小智 5

问题是EXISTS在某些语法结构中只是有效的语法.我不知道正式的规则(这意味着我应该去RTFM: - ?),但是当用作表达式时EXISTS,case它可以包含在其中:

set @r = case when exists (...) then 1 else 0 end

return case when exists (...) then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

例如

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
Run Code Online (Sandbox Code Playgroud)

  • 你自己的第一个陈述是无效的(`存在时的情况......').我建议删除或改进它,否则你会无意中建议`case`是一个语句,而不是表达式,并且可能能够确定流的控制,就像在其他语言中一样,这是许多绿色用户所假设的T-SQL也是如此. (2认同)