Is het mogelijk om een select statement te doen dat alleen NOT NULL waarden neemt?
Op dit moment gebruik ik dit:
SELECT * FROM table
En dan moet ik de null waarden eruit filteren met een php loop.
Is er een manier om dit te doen:
SELECT * (that are NOT NULL) FROM table
?
Op dit moment als ik * selecteer krijg ik val1,val2,val3,null,val4,val5,null,null etc.... maar ik wil alleen de waarden krijgen die niet null zijn in mijn resultaat. Is dit mogelijk zonder te filteren met een lus?
Je moet IS NOT NULL
gebruiken. (De vergelijkingsoperatoren =
en <>
geven beide UNKNOWN
met NULL
aan weerszijden van de expressie).
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Voor de volledigheid vermeld ik nog even'dat je in MySQL ook de null safe equality operator kunt negeren, maar dit is geen standaard SQL.
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
Bewerkt naar aanleiding van opmerkingen. Het klinkt alsof je tabel misschien niet in de eerste normale vorm is, in welk geval het veranderen van de structuur je taak kan vergemakkelijken. Een paar andere manieren om het te doen...
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*/
Het nadeel van het bovenstaande is dat het de tabel meerdere keren scant, eenmaal voor elke kolom. Dat kan mogelijk vermeden worden door het onderstaande maar ik heb dit nog niet getest 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*/
U kunt rijen uitfilteren die een NULL waarde bevatten in een specifieke kolom:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT NULL
Als je rijen wilt filteren die een null in een kolom bevatten, probeer dan dit:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
-- ...
AND coln IS NOT NULL
Update: Gebaseerd op jullie commentaar, willen jullie dit misschien?
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
En ik ben het met Martin eens dat als je dit moet doen, je waarschijnlijk je database ontwerp moet veranderen.
Select * from your_table
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;
Het enige nadeel van deze aanpak is dat je maar 5 kolommen kunt vergelijken, daarna zal het resultaat altijd false zijn, dus ik vergelijk alleen de velden die NULL
kunnen zijn.