Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL SELECT uniquement les valeurs non nulles

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

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

Juste pour être complet, je mentionnerai que dans MySQL, vous pouvez également annuler le opérateur d'égalité sûr nul mais ce n'est pas du SQL standard.

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

Modifié pour refléter les commentaires. Il semble que votre table ne soit pas dans sa première forme normale, auquel cas la modification de la structure peut faciliter votre tâche. Quelques autres façons de le faire cependant...

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 analyse la table plusieurs fois une fois pour chaque colonne. Cela peut éventuellement être évité par ce qui suit, 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*/