2015-06-24 23 views
15

Có nhiều câu hỏi tương tự như, nhưng không có câu nào giải quyết chính xác vấn đề này. "Find All Rows With Null Value(s) in Any Column" là cái gần nhất tôi có thể tìm và cung cấp câu trả lời cho SQL Server, nhưng tôi đang tìm cách để làm điều này trong PostgreSQL.Cách tìm tất cả các hàng có giá trị NULL trong cột bất kỳ bằng cách sử dụng PostgreSQL

Làm cách nào để chỉ chọn các hàng có giá trị NULL trong bất kỳ cột nào?

tôi có thể nhận được tất cả các tên cột một cách dễ dàng đủ:

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

nhưng nó không rõ ràng làm thế nào để kiểm tra nhiều tên cột cho các giá trị NULL. Rõ ràng điều này sẽ không hoạt động:

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

searching chưa bật lên bất kỳ điều gì hữu ích.

+0

Còn có một câu trả lời trước, đó là gần gũi hơn nhiều (trên thực tế trả lời câu hỏi của bạn - cùng giải pháp mà @Marth đã đăng)): http://stackoverflow.com/a/21026085/939860 –

+0

Điều đó có vẻ tương tự (mặc dù khó hiểu bởi vì người hỏi không bao giờ đặt ra một dạng đơn giản của câu hỏi một cách trực tiếp) nhưng có một chút khác biệt vì nó về * cột * cụ thể là NOT NULL thay vì * bất kỳ * cột nào CÓ GIÁ TRỊ. Tuy nhiên nó rất hữu ích để biết câu hỏi đó là có. Cảm ơn! – iconoclast

Trả lời

24

Bạn có thể sử dụng NOT(<table> IS NOT NULL).

Từ the documentation:

Nếu biểu thức là hàng có giá trị, sau đó IS NULL là đúng khi hàng biểu hiện chính nó là null hoặc khi tất cả các lĩnh vực của hàng là null, trong khi IS NOT NULL là đúng khi biểu thức hàng chính nó là không null và tất cả các trường của hàng là không null.

Vì vậy:

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

Tôi đã suy nghĩ về 'row_to_json()' nhưng điều này là tốt hơn nhiều –

Các vấn đề liên quan