Est-il possible de faire une instruction select qui ne prend que des valeurs NOT NULL?
En ce moment j'utilise ceci:
SELECT * FROM table
Et puis je dois filtrer les valeurs nulles avec une boucle php.
Existe-t-il un moyen de faire:
SELECT * (that are NOT NULL) FROM table
?
En ce moment quand je sélectionne * j'obtiens val1, val2, val3, null, val4, val5, null, null etc .... mais je veux juste obtenir les valeurs qui ne sont pas nulles dans mon résultat. Est-ce possible sans filtrage avec une boucle?
Réponses:
Vous devez utiliser
IS NOT NULL
. (Les opérateurs de comparaison=
et les<>
deux donnentUNKNOWN
avecNULL
de chaque côté de l'expression.)Pour être complet, je mentionnerai que dans MySQL, vous pouvez également annuler l' opérateur d'égalité de sécurité nulle, mais ce n'est pas du SQL standard.
Modifié pour refléter les commentaires. Il semble que votre table ne soit pas dans sa première forme normale, auquel cas le changement de structure peut vous faciliter la tâche. Quelques autres façons de le faire ...
L'inconvénient de ce qui précède est qu'il analyse la table plusieurs fois une fois pour chaque colonne. Cela peut être évité par ce qui suit, mais je n'ai pas testé cela dans MySQL.
la source
CASE
instruction, pas laCASE
fonction. Ne devrait-il pas en être ainsiEND CASE
plutôt queEND
dans laSELECT CASE ...
partie?idx
rom la premièreSELECT
vient-elle deidx
la secondeSELECT
? Qu'est-ce que l'CASE
énoncé essaie d'accomplir? Que faitSELECT
réellement le second ? Et vous faites une jointure intérieure, pas une jointure croisée, non?SELECT * FROM table WHERE * IS NOT NULL AND primary_key="somevalue"
)Vous pouvez filtrer les lignes contenant une valeur NULL dans une colonne spécifique:
Si vous souhaitez filtrer les lignes contenant un null dans n'importe quelle colonne, essayez ceci:
Mise à jour: Sur la base de vos commentaires, peut-être voulez-vous cela?
Et je suis d'accord avec Martin que si vous devez le faire, vous devriez probablement changer la conception de votre base de données.
la source
*
retournent? Peut-être fournissez un peu d'exemples de données dans votre question car il n'est pas clair d'après votre commentaire ci-dessus s'il s'agit d'une seule colonne.Le seul inconvénient de cette approche est que vous ne pouvez comparer que 5 colonnes, après quoi le résultat sera toujours faux, donc je ne compare que les champs qui peuvent l'être
NULL
.la source
J'ai trouvé cette solution:
Cette requête sélectionne la dernière valeur non nulle pour chaque colonne.
Exemple
Si vous avez une table:
vous obtenez:
Requete
J'espère vous aider.
la source
J'utilise la
\!
commande dans MySQL pour extraire les valeurs NULL du shell:Cela fonctionne mieux avec un bon
.my.cnf
où votre base de données / nom d'utilisateur / mot de passe est spécifié. De cette façon, vous n'avez qu'à entourer votreselect
avec\! mysql e
et| grep -v NULL
.la source
Requête suivante qui fonctionne pour moi
quand j'ai défini la valeur par défaut de la colonne 'NULL' alors
et quand j'ai mis rien par défaut alors
la source
Oui, utilisez
NOT NULL
dans votre requête comme ci-dessous.la source
MYSQL N'EST PAS NUL AVEC JOINS ET SELECT, INSÉRER DANS, SUPPRIMER ET OPÉRATEUR LOGIQUE COMME OU, NON
la source
la source