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