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を返したいのですが、上記の構文は無効です。
このようなことはできますか?もしそうなら、私は構文的に何が欠けていますか?そうでない場合、他にどのような手法が機能する可能性がありますか?
お知らせ下さい。ありがとう。
これは、MySQLとOracleでテストされたEXISTS
と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をいくつか見つけました:
のようなものはどうですか
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
問題は、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