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 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).

È stato utile?

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
scroll top