Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL SELECT solo valori non nulli

Dovresti usare IS NOT NULL . (Gli operatori di confronto = e <> entrambi danno UNKNOWN con NULL su entrambi i lati dell'espressione.)

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

Solo per completezza menzionerò che in MySQL puoi anche negare il operatore di uguaglianza nullo sicuro ma questo non è SQL standard.

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

Modificato per riflettere i commenti. Sembra che il tuo tavolo potrebbe non essere nella prima forma normale, nel qual caso cambiare la struttura potrebbe semplificare il tuo compito. Un paio di altri modi per farlo però...

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

Lo svantaggio di quanto sopra è che esegue la scansione della tabella più volte una volta per ogni colonna. Ciò potrebbe essere evitato da quanto segue, ma non l'ho testato in 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*/