Determinar la existencia de resultados en jet SQL?
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).
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