21

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を返したいのですが、上記の構文は無効です。

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

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

4

5 に答える 5

18

これは、MySQL と Oracle でテストされた withEXISTSを使用するものです。CASE 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 をいくつか見つけました。

于 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 に答える