J'ai un problème où lorsque j'essaie de sélectionner les lignes qui ont un NULL pour une certaine colonne, il renvoie un ensemble vide. Cependant, lorsque je regarde le tableau dans phpMyAdmin, il indique null pour la plupart des lignes.
Ma requête ressemble à ceci:
SELECT pid FROM planets WHERE userid = NULL
Ensemble vide à chaque fois.
Beaucoup d'endroits ont dit de s'assurer qu'ils ne sont pas stockés comme "NULL" ou "null" au lieu d'une valeur réelle, et l'un a dit d'essayer de chercher juste un espace ( userid = ' '
) mais aucun de ceux-ci n'a fonctionné. Il a été suggéré de ne pas utiliser MyISAM et d'utiliser innoDB car MyISAM a du mal à stocker null. J'ai changé la table en innoDB mais maintenant je pense que le problème peut être qu'elle n'est toujours pas nulle en raison de la façon dont elle pourrait la convertir. Je voudrais le faire sans avoir à recréer la table en tant qu'innoDB ou autre chose, mais si je le dois, je peux certainement essayer cela.
Réponses:
Spécial de SQL NULL, et vous devez le faire
WHERE field IS NULL
, car NULL ne peut être égal à rien,y compris lui-même (c'est-à-dire: NULL = NULL est toujours faux).Voir
Rule 3
https://en.wikipedia.org/wiki/Codd%27s_12_rulesla source
select * from foo where bar <> "abc"
ne pas retourner les lignes où la barre est nulle. Cela m'a jeté une boucle aujourd'hui. Les documents appellent<>
l'opérateur "différent de", mais en réalité, c'est l'opérateur "est égal à autre chose que".la source
Comme tous reçoivent des réponses, je veux ajouter un peu plus. J'avais également fait face au même problème.
Pourquoi votre requête a-t-elle échoué? Tu as,
Cela ne vous donnera pas le résultat attendu, car depuis mysql doc
Je souligne.
Solution
Pour tester
NULL
, utilisez les opérateursIS NULL
etIS NOT NULL
.NULL
.NULL
.la source
Il y a aussi un
<=>
opérateur:Travaillerait. La bonne chose est que
<=>
peut également être utilisé avec des valeurs non NULL:SELECT NULL <=> NULL
les rendements1
.SELECT 42 <=> 42
les rendements1
aussi.Voir ici: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
la source
Informations sur http://w3schools.com/sql/sql_null_values.asp :
Donc en cas de problème:
la source
Eu le même problème où la requête:
n'a retourné aucune valeur. Semble être un problème avec MyISAM et la même requête sur les données dans InnoDB a renvoyé les résultats attendus.
Allé avec:
Renvoyé tous les résultats attendus.
la source
la source
J'ai eu le même problème lors de la conversion de bases de données d'Access en MySQL (en utilisant vb.net pour communiquer avec la base de données).
J'avais besoin d'évaluer si un champ (type de champ varchar (1)) était nul.
Cette déclaration a fonctionné pour mon scénario:
la source