Conciso, rápido (especialmente con muchas filas), mi favorito con respecto a la legibilidad y también funcionaría con engaños:
SELECT count(*) = 1 AND min(val) = 1 FROM foo;
Devuelve TRUE/ FALSE.. o NULL- solo en el caso de exactamente una fila con val IS NULL, porque count()nunca devuelve NULLo no hay fila.
El segundo 1en el ejemplo resulta ser el mismo que el primero, debido a su ejemplo.
La consulta en la pregunta falla con los NULLvalores. Considere la demostración simple:
CREATE TABLE foo (id int, val int);
INSERT INTO foo VALUES (1, 1),(2, NULL);
SELECT 'yes'
WHERE EXISTS(SELECT * FROM foo WHERE val = 1)
AND NOT EXISTS(SELECT * FROM foo WHERE val <> 1);
IS DISTINCT FROMsolucionaría esto, pero aún podría fallar con duplicados val, lo que ha descartado para este caso.
Tu respuesta funciona bien.
Devoluciones 'yes'/ sin fila.
Sin embargo, preferiría esta forma más corta. No olvide que PostgreSQL (a diferencia de Oracle) tiene un booleantipo adecuado .
SELECT array_agg(val) = array[1] FROM foo;
Devoluciones TRUE/ FALSE/ NULL.