Usando una versión de Microsoft de SQL, aquí está mi consulta simple. Si consulto un registro que no existe, no obtendré nada devuelto. Preferiría que se devuelva falso (0) en ese escenario. Buscando el método más simple para contabilizar ningún registro.
SELECT CASE
WHEN S.Id IS NOT NULL AND S.Status = 1 AND (S.WebUserId = @WebUserId OR S.AllowUploads = 1) THEN 1
ELSE 0
END AS [Value]
FROM Sites S
WHERE S.Id = @SiteId
Esto es similar al de Adam Robinson, pero usa ISNULL en lugar de COUNT.
Si la consulta interna tiene una fila coincidente, se devuelve 1. La consulta externa (con ISNULL) luego devuelve este valor de 1. Si la consulta interna no tiene una fila coincidente, entonces no devuelve nada. La consulta externa trata esto como un NULL, por lo que ISNULL termina devolviendo 0.
fuente
Esto podría ser un caballo muerto, otra forma de devolver 1 fila cuando no existen filas es UNIONAR otra consulta y mostrar resultados cuando no existen en la tabla.
fuente
SELECT 0
), luego hice unaSUM
unión. Sencillo y fácil de seguir.Algo como:
fuente
select 1
yselect 2
yo agregamosas <colName>
Leí todas las respuestas aquí y me tomó un tiempo averiguar qué estaba pasando. Lo siguiente se basa en la respuesta de Moe Sisko y algunas investigaciones relacionadas
Si su consulta SQL no devuelve ningún dato, no hay un campo con un valor nulo, por lo que ni ISNULL ni COALESCE funcionarán como usted desea. Al usar una subconsulta, la consulta de nivel superior obtiene un campo con un valor nulo, y tanto ISNULL como COALESCE funcionarán como usted quiere / espera que lo hagan.
Mi consulta
Mi consulta con comentarios
fuente
Solo tienes que reemplazar el DONDE con un LEFT JOIN:
Esta solución también le permite devolver valores predeterminados para cada columna, por ejemplo:
fuente
Ningún registro coincidente significa que no se devolvió ningún registro. No hay lugar para el "valor" de 0 si no se encuentran registros. Podría crear una consulta UNION loca para hacer lo que quiera, pero mucho, mucho, mucho mejor simplemente para verificar la cantidad de registros en el conjunto de resultados.
fuente
Esta podría ser una forma.
fuente
¿Y CON LAZOS?
fuente
fuente
La respuesta de @hai-phan
LEFT JOIN
es la clave, pero puede ser un poco difícil de seguir. Tuve una consulta complicada que también puede no devolver nada. Simplemente simplifiqué su respuesta a mi necesidad. Es fácil de aplicar a consultas con muchas columnas.fuente
fuente