Question

Sous Jet, je souhaite tester si certaines conditions donnent des résultats.

Je souhaite une requête qui renvoie exactement un enregistrement: " true " s'il y a des résultats, " false " sinon.

Ceci fonctionne dans MS SQL:

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

Voici ce que j'ai essayé dans Jet:

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

qui me donne l'erreur:

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

Des idées?

REMARQUE Je ne souhaite pas sélectionner "vrai". plusieurs fois en ajoutant une clause FROM à la fin, car elle peut être lente (si la table FROM contient de nombreux enregistrements) ou indéfinie (si la table contient 0 enregistrements).

Était-ce utile?

La solution

Que diriez-vous de:

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

Peut-être plus clairement:

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

Autres conseils

Vous pourrez peut-être utiliser un nombre

SELECT DISTINCT IIF((SELECT COUNT(*) AS Result FROM [Data Set]), 1, 0) FROM [Data Set];

La plupart des requêtes EXISTS peuvent être réécrites en jointure gauche:

    SELECT
      CASE
        WHEN foo.col is NULL 
        THEN 0
        ELSE 1
    END;
   ... LEFT JOIN foo on <where condition>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top