Frage

In Jet, mag ich testen, ob bestimmte Bedingungen keine Ergebnisse zurück.

Ich möchte eine Abfrage, die genau einen Datensatz zurückgibt. „True“, wenn es irgendwelche Ergebnisse, „false“ sonst

Das funktioniert in MS SQL:

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

Das ist, was ich in Jet versucht:

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

das gibt mir den Fehler:

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

Irgendwelche Ideen?

Hinweis Ich will nicht auf „true“ mehrfach auswählen, indem Sie am Ende auf einem FROM-Klausel anheftet, weil es langsam sein könnte (wenn die FROM-Tabelle viele Datensätze hatten) oder nicht definiert ist (wenn die Tabelle 0 Datensätze hatte).

War es hilfreich?

Lösung

Wie wäre:

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

Vielleicht deutlicher:

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

Andere Tipps

Sie könnten in der Lage sein, eine Zählung verwenden

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

Die meisten VORHANDEN können Abfragen als linke neu geschrieben werden beitreten:

    SELECT
      CASE
        WHEN foo.col is NULL 
        THEN 0
        ELSE 1
    END;
   ... LEFT JOIN foo on <where condition>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top