MySQL SELECT seulement pas les valeurs null

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.

Y a-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?

Vous devriez utiliser IS NOT NULL . (Les opérateurs de comparaison = et <> donnent tous deux UNKNOWN avec NULL de chaque côté de l’expression.)

 SELECT * FROM table WHERE YourColumn IS NOT NULL; 

Pour plus de précision, je mentionnerai que dans MySQL, vous pouvez également annuler l’ opérateur d’égalité de sécurité null, mais ce n’est pas un SQL standard.

 SELECT * FROM table WHERE NOT (YourColumn <=> NULL); 

Edité pour refléter les commentaires. Il semblerait que votre table ne soit pas en première forme, auquel cas changer de structure peut vous faciliter la tâche. Quelques autres façons de le faire si …

 SELECT val1 AS val FROM your_table WHERE val1 IS NOT NULL UNION ALL SELECT val2 FROM your_table WHERE val2 IS NOT NULL /*And so on for all your columns*/ 

L’inconvénient de ce qui précède est qu’il scanne la table plusieurs fois une fois pour chaque colonne. Cela pourrait être évité par le dessous mais je n’ai pas testé cela dans MySQL.

 SELECT CASE idx WHEN 1 THEN val1 WHEN 2 THEN val2 END AS val FROM your_table /*CROSS JOIN*/ JOIN (SELECT 1 AS idx UNION ALL SELECT 2) t HAVING val IS NOT NULL /*Can reference alias in Having in MySQL*/ 

Vous pouvez filtrer les lignes contenant une valeur NULL dans une colonne spécifique:

 SELECT col1, col2, ..., coln FROM yourtable WHERE somecolumn IS NOT NULL 

Si vous souhaitez filtrer les lignes contenant un null dans une colonne, essayez ceci:

 SELECT col1, col2, ..., coln FROM yourtable WHERE col1 IS NOT NULL AND col2 IS NOT NULL -- ... AND coln IS NOT NULL 

Mise à jour: Sur la base de vos commentaires, vous voulez peut-être cela?

 SELECT * FROM ( SELECT col1 AS col FROM yourtable UNION SELECT col2 AS col FROM yourtable UNION -- ... UNION SELECT coln AS col FROM yourtable ) T1 WHERE col IS NOT NULL 

Et je suis d’accord avec Martin que si vous devez faire cela, vous devriez probablement changer la conception de votre firebase database.

 Select * from your_table WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL; 

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 pouvant être NULL .

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:

 id|title|body 1 |t1 |b1 2 |NULL |b2 3 |t3 |NULL 

vous obtenez:

 title|body t3 |b2 

Question


 SELECT DISTINCT ( SELECT title FROM test WHERE title IS NOT NULL ORDER BY id DESC LIMIT 1 ) title, ( SELECT body FROM test WHERE body IS NOT NULL ORDER BY id DESC LIMIT 1 ) body FROM test 

J’espère vous aider.

J’utilise le \! commande dans MySQL pour extraire les valeurs NULL du shell:

 \! mysql -e "SELECT * FROM table WHERE column = 123456\G" | grep -v NULL 

Cela fonctionne mieux avec un .my.cnf approprié où votre firebase database / nom d’utilisateur / mot de passe sont spécifiés. De cette façon, il vous suffit d’entourer votre select avec \! mysql e \! mysql e et | grep -v NULL | grep -v NULL .

Oui, utilisez NOT NULL dans votre requête comme ci-dessous.

 SELECT * FROM table WHERE col IS NOT NULL; 

Requête suivante travaillant pour moi

quand j’ai défini la valeur par défaut de la colonne ‘NULL’ alors

 select * from table where column IS NOT NULL 

et quand j’ai rien défini valeur par défaut alors

 select * from table where column <>'' 
 SELECT * FROM TABLE_NAME where COLUMN_NAME <> '';