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

MySQL SELECT kun ikke null-værdier

Du skal bruge IS NOT NULL . (Sammenligningsoperatorerne = og <> begge giver UNKNOWN med NULL på hver side af udtrykket.)

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

For fuldstændighedens skyld vil jeg nævne, at du i MySQL også kan ophæve null sikker ligestillingsoperatør men dette er ikke standard SQL.

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

Redigeret for at afspejle kommentarer. Det lyder som om, at din tabel muligvis ikke er i den første normale form, i hvilket tilfælde en ændring af strukturen kan gøre din opgave lettere. Et par andre måder at gøre det på...

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

Ulempen ved ovenstående er, at den scanner tabellen flere gange én gang for hver kolonne. Det kan muligvis undgås af nedenstående, men jeg har ikke testet dette i 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*/


  1. Trigger vs. kontrolbegrænsning

  2. Guide til designdatabase til afstemning og undersøgelse i MySQL

  3. Brug af data beskyttet med en Azure Key Vault fra Linux

  4. Problem ved sammenligning af resultatet af to_char(myDate, 'DAY') med en streng