Ceci est une question complémentaire à ma dernière question sur les jointures de table dans MySQL
J'ai besoin de pouvoir sélectionner les valeurs NULL dans le tableau joint à gauche.
Voici ma jointure:
table1.id | table1.name | table2.id | table2.surname
1 | John | 1 | Doe
2 | Michael | 2 | Anderson
3 | Anna | NULL | NULL
4 | Sue | NULL | NULL
Je voudrais select WHERE table2.surname = NULL
, mais une requête comme celle-ci ne fonctionne pas:
SELECT table1.*,table2.*
FROM table1
LEFT JOIN table2
ON table1.id=table2.id
WHERE table2.surname=NULL
Je peux comprendre quelque peu la logique derrière cela ne me donnant aucun résultat, mais il doit y avoir un moyen de les saisir?
Appréciez toute aide.
Pour comparer les valeurs de NULL
, vous devez utiliser le IS NULL
prédicat, comme ceci:
SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.surname IS NULL
Vous devez utiliser IS NULL
au lieu de = NULL
:
WHERE table2.surname IS NULL
La raison pour laquelle vous ne pouvez pas simplement faire = NULL
est parce que NULL
est essentiellement un "inconnu" et ne peut pas égal ou différent de à quoi que ce soit (même pas lui-même), donc essayer de le comparer à quelque chose comme s'il était censé être une correspondance exacte serait renvoyez simplement NULL
au lieu d'un booléen attendu 0
ou 1
, et c'est exactement pourquoi votre requête renvoyait un résultat vide.
Il y a une nette différence entre "est inconnu" et "est inconnu" . Vous pouvez sûrement tester si quelque chose est inconnu ou n'est pas inconnu, mais vous ne pouvez pas tester si quelque chose "est égal à " inconnu car inconnu est inconnu , et cela n'aurait aucun sens.
De plus, comme vous utilisez MySQL, une autre option serait d'utiliser table2.surname <=> NULL
, où <=>
est un opérateur de comparaison NULL-Safe spécifique à MySQL, mais essayez de ne pas l'utiliser et de vous en tenir à la méthode SQL standard (IS NULL
/IS NOT NULL
)
essayez avec:
SELECT table1.*,table2.*
FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.surname IS NULL
Selon spécification MySQL vous devez utiliser "IS NULL" au lieu de "= NULL". Il indique que "(NULL = NULL) est égal à NULL". Mais NULL est égal à False alors qu'il est utilisé comme booléen.