Je travaille ici avec une petite complication d'affichage. Je suis sûr qu'il y a une capacité IF / ELSE que je néglige.
J'ai 2 tables que j'interroge (clients, adresses). Le premier a l'enregistrement principal, mais le second peut ou non avoir un enregistrement à GAUCHE JOIN.
Je veux afficher un zéro s'il n'y a pas d'enregistrement dans la table des adresses. Et je veux afficher seulement 1, si un enregistrement existe.
Ce que j'ai tenté jusqu'à présent:
SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
Ce premier exemple ne le fait pas. Mais j'utilise peut-être mal COALESCE.
Comment puis-je afficher un 0, si nul, et un 1, si quelque chose existe?
mysql
if-statement
cafetière
la source
la source
Réponses:
Au lieu de
COALESCE(a.addressid,0) AS addressexists
, utilisezCASE
:ou le plus simple:
Cela fonctionne car
TRUE
est affiché comme1
dans MySQL etFALSE
comme0
.la source
la source
Attention si vous venez de C / C ++ et que vous vous attendez à ce que cela fonctionne:
Même si 'nom' n'est pas NULL, contrairement à C, une fausse condition se déclenche toujours et l'instruction ci-dessus renvoie 0. Ainsi, vous devez vous rappeler de vérifier explicitement NULL ou une chaîne vide:
L'exemple de PS Eugen ci-dessus est correct , mais je voulais clarifier cette nuance car il m'a pris par surprise.
la source
la source
Une autre méthode sans WHERE, essayez ceci.
Sélectionne à la fois les valeurs vides et nulles
Il mettra null si c'est une chaîne vide, alors sera vrai sur cela également.
la source
Vous pouvez en fait utiliser une instruction IF dans les dernières versions de MySQL.
C'EST À DIRE:
la source
Si dans TSQL, vous pouvez essayer:
SQL Server devrait fonctionner
la source