MySQL SELECTAȚI doar nu valori nule

Este posibil să se facă o instrucțiune select care durează doar NU valori NULE?

Acum eu sunt, folosind acest:

SELECT * FROM table

Și atunci am avea de a filtra valorile nule cu o bucla php.

Există o modalitate de a face:

SELECT * (that are NOT NULL) FROM table

?

Acum când am selectați * am val1,val2,val3,null,val4,val5,null,null, etc.... dar vreau doar pentru a obține valori care nu sunt nule în rezultatul meu. Este posibil acest lucru fără filtrare cu o buclă?

Comentarii la întrebare (10)
Soluția

Ar trebui să utilizați NU ESTE NUL. (Comparația operatorii = și <> da NECUNOSCUT cu NULL pe fiecare parte a expresiei.)

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

Doar pentru completitudine I'll menționăm că în MySQL puteți anula, de asemenea, a nul în condiții de siguranță egalitatea operator, dar acest lucru nu este standard SQL.

SELECT *
FROM table 
WHERE NOT (YourColumn  NULL);

Editate pentru a reflecta comentarii. Se pare ca masa ta ar putea să nu fie în prima formă normală, caz în care schimbarea structurii poate face sarcina mai ușoară. O serie de alte moduri de a face asta, deși...

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

Dezavantajul de mai sus este că acesta scanează masă de mai multe ori, o dată pentru fiecare coloană. Care ar putea fi evitate de mai jos, dar nu am't testat acest lucru în 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*/
Comentarii (7)

Puteți filtra rândurile care conțin o valoare NULĂ într-o anumită coloană:

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

Dacă doriți pentru a filtra rândurile care conțin un nul în orice coloană, apoi încercați acest lucru:

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

Update: Bazat pe comentariile tale, poate doriți acest lucru?

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

Și nu au fost de acord cu Martin că, dacă aveți nevoie pentru a face acest lucru, atunci probabil că ar trebui să-ți schimbi proiectarea bazei de date.

Comentarii (3)
Select * from your_table 
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;

Singurul dezavantaj al acestei abordări este că puteți compara doar 5 coloane, după care rezultatul va fi întotdeauna false, așa că nu compara doar câmpurile care pot fi NULL.

Comentarii (0)

Am găsit această soluție:

Această interogare select ultima not null valoare pentru fiecare coloană.

Exemplu


Dacă aveți un tabel:

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

veți obține:

title|body
t3   |b2

Interogare


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

Sper să te ajute.

Comentarii (1)

Eu folosesc \! comanda în termen de MySQL pentru a grep afară valori NULE de coajă:

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

Aceasta funcționează cel mai bine cu o buna .meu.cnf în cazul în care dumneavoastră de baze de date/nume de utilizator/parola sunt specificate. Așa trebuie să înconjoare "alege" cu \! mysql e " și " | grep -v NULL.

Comentarii (1)

Următoarea interogare de lucru pentru mine

când am stabilit valoarea implicită a coloanei 'NUL' apoi

select * from table where column IS NOT NULL

și atunci când am stabilit valoarea implicită nimic atunci

select * from table where column ''
Comentarii (0)

Da folosesc NULL în interogare ca aceasta de mai jos.

SELECT * 
FROM table
WHERE col IS NOT NULL;
Comentarii (0)

MYSQL NU ESTE NULL CU se ALĂTURĂ ȘI SELECTAȚI, INTRODUCEȚI ÎN, ȘTERGE & OPERATOR LOGIC PLACE SAU NU

Using IS NOT NULL On Join Conditions

 SELECT * FROM users 
 LEFT JOIN posts ON post.user_id = users.id 
 WHERE user_id IS NOT NULL;

 Using IS NOT NULL With AND Logical Operator

 SELECT * FROM users 
 WHERE email_address IS NOT NULL 
 AND mobile_number IS NOT NULL;

Using IS NOT NULL With OR Logical Operator

 SELECT * FROM users 
 WHERE email_address IS NOT NULL 
 OR mobile_number IS NOT NULL;
Comentarii (0)
SELECT * FROM TABLE_NAME
where COLUMN_NAME  '';
Comentarii (1)