321 votes

MySQL: sélection des lignes où une colonne est nulle

J'ai un problème lorsque j'essaie de sélectionner les lignes qui ont une valeur NULL pour une certaine colonne, il renvoie à un ensemble vide. Cependant, quand je regarde la table dans phpMyAdmin, il est dit nulle pour la plupart des lignes.

Ma requête ressemble à quelque chose comme ceci:

SELECT pid FROM planets WHERE userid = NULL

Ensemble vide à chaque fois.

Beaucoup d'endroits, dit-assurez-vous qu'il n'est pas enregistré comme "NULL" ou "null" à la place d'une valeur réelle, et l'un dit à essayer de le chercher juste un espace (userid = ' '), mais aucun d'entre eux ont travaillé. Il a été suggéré de ne pas utiliser MyISAM et utiliser innoDB parce que MyISAM a de la difficulté à stocker la valeur null. Je suis passé de la table innoDB, mais maintenant je pense que le problème est peut-être qu'il n'est toujours pas réellement nulle, car de la façon que l'on pourrait le convertir. J'aimerais le faire sans avoir à recréer la table comme innoDB ou autre chose, mais si je dois le faire, je peux certainement essayer.

607voto

Marc B Points 195501

SQL NULL est spécial et vous devez 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).

94voto

Michael Pakhantsov Points 11344
SELECT pid FROM planets WHERE userid IS NULL

49voto

Aniket Kulkarni Points 3743

Comme tous sont donné les réponses que je veux ajouter un peu plus. J'avais aussi été confronté au même problème.

Pourquoi l'échec de la requête? Vous avez,

SELECT pid FROM planets WHERE userid = NULL;

Cela ne vous donnera pas le résultat escompté, en raison de la doc mysql

En SQL, la valeur NULL n'est jamais vrai par rapport à toute autre valeur, même NULLE. Une expression qui contient une valeur NULL produit toujours une valeur NULLE à moins d'indication contraire dans la documentation pour les opérateurs et les fonctions impliquées dans l'expression.

C'est moi qui souligne.

Pour rechercher des valeurs de la colonne NULL, vous ne pouvez pas utiliser un expr = NULL de test. L'instruction suivante ne retourne aucune ligne, car expr = NULL n'est jamais vrai pour n'importe quelle expression

Solution

SELECT pid FROM planets WHERE userid IS NULL; 

Pour tester NULL, l'utilisation de l' IS NULL et IS NOT NULL opérateurs.

12voto

minhas23 Points 365

INFO DE http://w3schools.com/sql/sql_null_values.asp

1) les valeurs NULL représentent manque de données inconnu.

2) Par défaut, une colonne de table peut contenir des valeurs NULL.

3) les valeurs NULL sont traités différemment des autres valeurs

4) Il n'est pas possible de comparer la valeur NULL et 0; ils ne sont pas équivalents.

5) Il n'est pas possible de faire le test pour les valeurs NULL avec les opérateurs de comparaison, tels que=, <,<>.

6) Nous allons utiliser le is NULL et is not NULL opérateurs au lieu

Exemple, SELECT Nom,Prenom,Adresse DE Personnes OÙ l'Adresse EST NULL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X