Yalnızca NOT NULL değerlerini alan bir select deyimi yapmak mümkün müdür?
Şu anda bunu kullanıyorum:
SELECT * FROM table
Ve sonra null değerleri bir php döngüsü ile filtrelemem gerekiyor.
Bunu yapmanın bir yolu var mı?
SELECT * (that are NOT NULL) FROM table
?
Şu anda * seçtiğimde val1,val2,val3,null,val4,val5,null,null vs.... alıyorum ama ben sadece sonucumda null olmayan değerleri almak istiyorum. Bir döngü ile filtreleme yapmadan bu mümkün mü?
IS NOT NULLkullanmalısınız. (Karşılaştırma operatörleri
=ve
<>, ifadenin her iki tarafında da
NULLile birlikte
UNKNOWN` değerini verir).
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Sadece bütünlük için MySQL'de null safe equality operator'i de olumsuzlayabileceğinizi ancak bunun standart SQL olmadığını belirteceğim.
SELECT *
FROM table
WHERE NOT (YourColumn <=> NULL);
Yorumları yansıtacak şekilde düzenlenmiştir. Tablonuz birinci normal formda olmayabilir gibi görünüyor, bu durumda yapıyı değiştirmek işinizi kolaylaştırabilir. Yine de bunu yapmanın birkaç başka yolu var...
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*/
Yukarıdakinin dezavantajı, tabloyu her sütun için bir kez olmak üzere birden çok kez taramasıdır. Bu muhtemelen aşağıdaki yöntemle önlenebilir ancak bunu MySQL'de test etmedim.
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*/
Belirli bir sütunda NULL değer içeren satırları filtreleyebilirsiniz:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE somecolumn IS NOT NULL
Herhangi bir sütunda null içeren satırları filtrelemek istiyorsanız bunu deneyin:
SELECT col1, col2, ..., coln
FROM yourtable
WHERE col1 IS NOT NULL
AND col2 IS NOT NULL
-- ...
AND coln IS NOT NULL
Güncelleme: Yorumlarınıza göre, belki de bunu istiyorsunuzdur?
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
Martin ile aynı fikirdeyim, eğer bunu yapmanız gerekiyorsa muhtemelen veritabanı tasarımınızı değiştirmelisiniz.
Select * from your_table
WHERE col1 and col2 and col3 and col4 and col5 IS NOT NULL;
Bu yaklaşımın tek dezavantajı, yalnızca 5 sütunu karşılaştırabilmenizdir, bundan sonra sonuç her zaman yanlış olacaktır, bu yüzden yalnızca NULL
olabilen alanları karşılaştırıyorum.