sql >> Base de Datos >  >> RDS >> Mysql

MySQL SELECT solo no valores nulos

Deberías usar IS NOT NULL . (Los operadores de comparación = y <> ambos dan UNKNOWN con NULL a cada lado de la expresión).

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

Solo para completar, mencionaré que en MySQL también puede negar el operador de igualdad seguro nulo pero esto no es SQL estándar.

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

Editado para reflejar los comentarios. Parece que su tabla puede no estar en la primera forma normal, en cuyo caso cambiar la estructura puede facilitar su tarea. Sin embargo, hay un par de otras formas de hacerlo...

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*/

La desventaja de lo anterior es que escanea la tabla varias veces para cada columna. Eso posiblemente se pueda evitar con lo siguiente, pero no lo he probado en 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*/