Pregunta

En Jet, quiero probar si ciertas condiciones devuelven algún resultado.

Quiero una consulta que devuelva exactamente un registro: " verdadero " si hay algún resultado, "falso" de lo contrario.

Esto funciona en MS SQL:

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

Esto es lo que he intentado en Jet:

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

que me da el error:

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

¿Alguna idea?

NOTA No quiero seleccionar "verdadero" varias veces agregando una cláusula FROM al final, porque podría ser lenta (si la tabla FROM tenía muchos registros) o indefinida (si la tabla tenía 0 registros).

¿Fue útil?

Solución

¿Qué tal:

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

Quizás más claramente:

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

Otros consejos

Es posible que pueda usar un conteo

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

La mayoría de las consultas EXISTENTES se pueden volver a escribir como una combinación izquierda:

    SELECT
      CASE
        WHEN foo.col is NULL 
        THEN 0
        ELSE 1
    END;
   ... LEFT JOIN foo on <where condition>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top