有许多略有相似的问题,但没有一个能解决这个问题。 “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没有出现任何有用的内容。
答案 0 :(得分:33)
您可以使用NOT(<table> IS NOT NULL)
。
如果表达式是行值,则行时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)