如何使用PostgreSQL在任何列中查找具有NULL值的所有行

时间:2015-06-24 19:01:56

标签: sql postgresql

有许多略有相似的问题,但没有一个能解决这个问题。 “Find All Rows With Null Value(s) in Any Column”是我能找到的最接近的一个,并为SQL Server提供了答案,但我正在寻找一种方法在PostgreSQL中执行此操作。

如何在任何列中仅选择具有NULL值的行?

我可以轻松获得所有列名称:

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

但目前还不清楚如何为NULL值检查多个列名。显然这不起作用:

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

并且searching没有出现任何有用的内容。

1 个答案:

答案 0 :(得分:33)

您可以使用NOT(<table> IS NOT NULL)

来自the documentation

  

如果表达式是行值,则行时IS NULL为真   表达式本身为null或当所有行的字段为空时,while   当行表达式本身为非null且全部为时,IS NOT NULL为true   行的字段为非空。

所以:

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)