2015-06-24 16 views
15

'u kullanarak herhangi bir sütunda NULL bir değere sahip tüm satırları nasıl bulunur? Bazı hafif benzer soruları vardır, ancak hiçbiri tam olarak bu sorunu çözmez. "Find All Rows With Null Value(s) in Any Column", bulabildiğim en yakın ve SQL Server için bir yanıt sunuyor, ancak PostgreSQL'te bunu yapmanın bir yolunu arıyorum.PostgreSQL

Yalnızca sütununda NULL değerlere sahip satırları nasıl seçebilirim?

select column_name from information_schema.columns where table_name = 'A'; 

ama NULL değerleri için birden sütun isimleri nasıl belirsiz:

kolayca yeterince tüm sütun isimleri alabilirsiniz. Açıkçası bu çalışmaz:

select* from A where (
    select column_name from information_schema.columns where table_name = 'A'; 
) IS NULL; 

Ve searching yararlı bir şey çıkmadı etmiştir.

+0

(aslında sorunuza yanıt - @Marth gönderdi aynı çözüm)): http://stackoverflow.com/a/21026085/939860 –

+0

Benzer görünmüyor (anlaşılması zor olsa da, çünkü soru sorusu asla doğrudan sorunun basit bir formunu oluşturmaz), ancak biraz farklıdır çünkü * özel * sütunlar NULL yerine değil * herhangi bir * sütun olmasıyla NULL DEĞİL. GEÇERSİZ DEĞİL. Yine de, sorunun orada olduğunu bilmek çok yararlıdır. Teşekkürler! – iconoclast

cevap

24

NOT(<table> IS NOT NULL)'u kullanabilirsiniz. the documentation itibaren

: satır ifadesinin kendisi null veya DEĞİL ise tüm satırın alanları, boş olduğunda NULL doğru olduğunda

ifade satır değerli ise, IS NULL doğrudur Satır ifadesinin kendisi null değilse ve tüm satırın alanları boş değil.

Yani: Başka bir önceki cevabı o kadar daha yakın bulunmaktadır

SELECT * FROM t; 
┌────────┬────────┐ 
│ f1 │ f2 │ 
├────────┼────────┤ 
│ (null) │  1 │ 
│  2 │ (null) │ 
│ (null) │ (null) │ 
│  3 │  4 │ 
└────────┴────────┘ 
(4 rows) 

SELECT * FROM t WHERE NOT (t IS NOT NULL); 
┌────────┬────────┐ 
│ f1 │ f2 │ 
├────────┼────────┤ 
│ (null) │  1 │ 
│  2 │ (null) │ 
│ (null) │ (null) │ 
└────────┴────────┘ 
(3 rows) 
+2

'row_to_json()' hakkında düşünüyordum ama bu çok daha iyi –