Determinare l'esistenza dei risultati nel jet SQL?
Domanda
In Jet, voglio verificare se determinate condizioni restituiscono risultati.
Voglio una query che restituisca esattamente un record: " true " se ci sono risultati, "false" altrimenti.
Funziona in MS SQL:
SELECT
CASE
WHEN EXISTS(SELECT * FROM foo WHERE <some condition>)
THEN 1
ELSE 0
END;
Questo è quello che ho provato in Jet:
SELECT IIF(EXISTS(SELECT * FROM foo WHERE <some condition>), 0, 1);
che mi dà l'errore:
Reserved error (-3025); there is no message for this error.
Qualche idea?
Nota ??strong> Non desidero selezionare " true " più volte applicando una clausola FROM alla fine, perché potrebbe essere lenta (se la tabella FROM aveva molti record) o indefinita (se la tabella avesse 0 record).
Soluzione
Che ne dici di:
SELECT TOP 1 IIF(EXISTS(
SELECT * FROM foo
WHERE <some condition>), 0, 1) As f1
FROM foo
Forse più chiaramente:
SELECT TOP 1 IIF(EXISTS(
SELECT * FROM foo
WHERE <some condition>), 0, 1) As F1
FROM MSysObjects
Altri suggerimenti
Potresti essere in grado di utilizzare un conteggio
SELECT DISTINCT IIF((SELECT COUNT(*) AS Result FROM [Data Set]), 1, 0) FROM [Data Set];
La maggior parte delle query EXISTS può essere riscritta come join sinistro:
SELECT
CASE
WHEN foo.col is NULL
THEN 0
ELSE 1
END;
... LEFT JOIN foo on <where condition>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow