Déterminer l'existence de résultats dans jet SQL?
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).
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>