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

如何使用PostgreSQL查找任何列中具有空值的所有行,sql,postgresql,Sql,Postgresql,有许多稍微相似的问题,但没有一个能准确地解决这个问题。“”是我能找到的最接近的一个,它为SQL Server提供了一个答案,但我正在寻找一种在PostgreSQL中实现这一点的方法 如何仅选择任何列中具有空值的行 我可以很容易地获得所有列名: select column_name from information_schema.columns where table_name = 'A'; 但不清楚如何检查多个列名中的空值。显然,这是行不通的: select* from A where (

有许多稍微相似的问题,但没有一个能准确地解决这个问题。“”是我能找到的最接近的一个,它为SQL Server提供了一个答案,但我正在寻找一种在PostgreSQL中实现这一点的方法

如何仅选择任何列中具有空值的行

我可以很容易地获得所有列名:

select column_name from information_schema.columns where table_name = 'A';
但不清楚如何检查多个列名中的空值。显然,这是行不通的:

select* from A where (
  select column_name from information_schema.columns where table_name = 'A';
) IS NULL;
并且没有显示任何有用的内容。

您可以使用
not(不为空)

发件人:

如果表达式是行值表达式,则当行 表达式本身为null,或者当所有行的字段都为null时 当行表达式本身为非NULL且所有 该行的字段不为空

因此:


我在考虑
行到行json()
,但这比前面的答案要好得多,更接近(实际上回答了你的问题-与@Marth发布的解决方案相同)):这看起来确实很相似(尽管很难理解,因为提问者从不直接提出简单形式的问题)但它有点不同,因为它是关于特定列不为NULL而不是任何列不为NULL。尽管如此,知道这个问题的存在是非常有用的。谢谢
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)