Usando uma versão Microsoft do SQL, aqui está minha consulta simples. Se eu consultar um registro que não existe, nada retornarei. Eu prefiro que false (0) seja retornado nesse cenário. Procurando o método mais simples de contabilizar nenhum 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
É semelhante ao de Adam Robinson, mas usa ISNULL em vez de COUNT.
Se a consulta interna tiver uma linha correspondente, 1 será retornado. A consulta externa (com ISNULL) retorna este valor de 1. Se a consulta interna não tiver nenhuma linha correspondente, ela não retornará nada. A consulta externa trata isso como um NULL e, portanto, o ISNULL acaba retornando 0.
fonte
Isso pode ser um cavalo morto, outra maneira de retornar 1 linha quando nenhuma linha existir é UNIONAR outra consulta e exibir os resultados quando não existirem na tabela.
fonte
SELECT 0
), depois fiz umaSUM
na união. Simples e fácil de seguir.Algo como:
fonte
select 1
eselect 2
eu adicionamosas <colName>
Li todas as respostas aqui e demorou um pouco para descobrir o que estava acontecendo. O seguinte é baseado na resposta de Moe Sisko e em algumas pesquisas relacionadas
Se sua consulta SQL não retornar nenhum dado, não há um campo com valor nulo, portanto nem ISNULL nem COALESCE funcionarão como você deseja. Usando uma subconsulta, a consulta de nível superior obtém um campo com um valor nulo e tanto ISNULL quanto COALESCE funcionarão como você deseja / espera.
Minha consulta
Minha consulta com comentários
fonte
Você só precisa substituir WHERE por LEFT JOIN:
Esta solução permite que você retorne valores padrão para cada coluna também, por exemplo:
fonte
Nenhum registro correspondente significa nenhum registro retornado. Não há lugar para o "valor" de 0 ir se nenhum registro for encontrado. Você poderia criar uma consulta UNION maluca para fazer o que quiser, mas muito, muito, muito melhor simplesmente verificar o número de registros no conjunto de resultados.
fonte
Isso pode ser uma maneira.
fonte
E COM LAÇOS?
fonte
fonte
A resposta de @hai-phan usando
LEFT JOIN
é a chave, mas pode ser um pouco difícil de entender. Tive uma consulta complicada que também pode não retornar nada. Eu apenas simplifiquei sua resposta à minha necessidade. É fácil aplicar a consulta com muitas colunas.fonte
fonte