En utilisant une version Microsoft de SQL, voici ma requête simple. Si j'interroge un enregistrement qui n'existe pas, je ne recevrai rien. Je préférerais que false (0) soit renvoyé dans ce scénario. Vous recherchez la méthode la plus simple pour ne tenir compte d'aucun enregistrement.
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
Ceci est similaire à celui d'Adam Robinson, mais utilise ISNULL au lieu de COUNT.
Si la requête interne a une ligne correspondante, 1 est renvoyé. La requête externe (avec ISNULL) renvoie alors cette valeur de 1. Si la requête interne n'a pas de ligne correspondante, alors elle ne renvoie rien. La requête externe traite cela comme un NULL, et donc ISNULL finit par renvoyer 0.
la source
Cela peut être un cheval mort, une autre façon de renvoyer 1 ligne quand aucune ligne n'existe est d'UNION une autre requête et d'afficher les résultats lorsqu'ils n'existent pas dans la table.
la source
SELECT 0
), puis j'ai fait uneSUM
sur l'union. Simple et facile à suivre.Quelque chose comme:
la source
select 1
etselect 2
j'ai ajoutéas <colName>
J'ai lu toutes les réponses ici, et il a fallu un certain temps pour comprendre ce qui se passait. Ce qui suit est basé sur la réponse de Moe Sisko et certaines recherches connexes
Si votre requête SQL ne renvoie aucune donnée, il n'y a pas de champ avec une valeur nulle, donc ni ISNULL ni COALESCE ne fonctionneront comme vous le souhaitez. En utilisant une sous-requête, la requête de niveau supérieur obtient un champ avec une valeur nulle, et ISNULL et COALESCE fonctionneront comme vous le souhaitez / attendez d'eux.
Ma requête
Ma requête avec commentaires
la source
Il vous suffit de remplacer le WHERE par un GAUCHE JOIN:
Cette solution vous permet également de renvoyer des valeurs par défaut pour chaque colonne, par exemple:
la source
Aucun enregistrement correspondant signifie qu'aucun enregistrement n'est retourné. Il n'y a pas de place pour la "valeur" de 0 si aucun enregistrement n'est trouvé. Vous pouvez créer une requête UNION folle pour faire ce que vous voulez mais beaucoup, beaucoup, beaucoup mieux simplement pour vérifier le nombre d'enregistrements dans le jeu de résultats.
la source
Cela pourrait être un moyen.
la source
Et avec TIES?
la source
la source
La réponse de @ hai-phan en utilisant
LEFT JOIN
est la clé, mais cela peut être un peu difficile à suivre. J'ai eu une requête compliquée qui peut également ne rien renvoyer. J'ai simplement simplifié sa réponse à mon besoin. Il est facile d'appliquer une requête avec de nombreuses colonnes.la source
la source