web-dev-qa-db-ja.com

WHERE句を使用せずにSQLEXISTSステートメントからのBOOLEAN結果が必要

WHERE句を使用せずにSQLEXISTSステートメントを使用してブール値を返す単純なクエリの方法はありますか?

2008 R2 SQL Server Books Onlineのすべての例は、別のWHERE句と2つのテーブルを示しています。 Webサイトの例は、プロシージャ内のWHEREまたはIF-THEN-ELSEのいずれかを示しています。

私は1つのテーブルで次のことをしたいと思っていました。

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

SELECTステートメントは正常に機能し、IDを返します。 EXISTSを追加してBOOLEANを返したいのですが、上記の構文は無効です。

このようなことはできますか?もしそうなら、私は構文的に何が欠けていますか?そうでない場合、他にどのような手法が機能する可能性がありますか?

お知らせ下さい。ありがとう。

17
blarson

これは、MySQLとOracleでテストされたEXISTSCASE WHEN ... THEN .. ELSE ... ENDを使用するものです。

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をいくつか見つけました:

13
ryenus

のようなものはどうですか

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'

「返品」の意味は完全にはわかりませんが、いくつかのアイデアがあります。

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
11
ThinkingStiff

問題は、EXISTSが特定の文法構造でのみ有効な構文であるということです。私は正式なルールを知りません(つまり、RTFM:-?)に行く必要がありますが、EXISTScaseでラップできます。 式として使用する場合

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
5
user166390