Bestimmen Existenz der Ergebnisse in Jet-SQL?
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).
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>