1

Jetでは、特定の条件が結果を返すかどうかをテストしたいと思います。

正確に1つのレコードを返すクエリが必要です。結果がある場合は「true」、それ以外の場合は「false」です。

これはMSSQLで機能します。

SELECT
  CASE
    WHEN EXISTS(SELECT * FROM foo WHERE <some condition>)
    THEN 1
    ELSE 0
  END;

これは私がJetで試したことです:

SELECT IIF(EXISTS(SELECT * FROM foo WHERE <some condition>), 0, 1);

これは私にエラーを与えます:

Reserved error (-3025); there is no message for this error.

何か案は?

最後にFROM句を追加して「true」を複数回選択したくないのは、低速(FROMテーブルに多くのレコードがある場合)または未定義(テーブルに0レコードがある場合)である可能性があるためです。

4

3 に答える 3

1

どうですか:

SELECT TOP 1 IIF(EXISTS(
       SELECT * FROM foo 
       WHERE <some condition>), 0, 1) As f1 
FROM foo

おそらくもっと明確に:

SELECT TOP 1 IIF(EXISTS(
       SELECT * FROM foo
       WHERE <some condition>), 0, 1) As F1 
FROM MSysObjects
于 2009-11-30T21:57:26.417 に答える
1

あなたはカウントを使うことができるかもしれません

SELECT DISTINCT IIF((SELECT COUNT(*) AS Result FROM [Data Set]), 1, 0) FROM [Data Set];
于 2009-11-30T22:26:06.907 に答える
0

ほとんどのEXISTSクエリは、左結合として書き直すことができます。

    SELECT
      CASE
        WHEN foo.col is NULL 
        THEN 0
        ELSE 1
    END;
   ... LEFT JOIN foo on <where condition>
于 2009-11-30T21:50:07.017 に答える