有许多“稍微相似”的问题,但没有一个能准确地解决这个问题。“Find All Rows With Null Value(s) in Any Column”是我能找到的最接近的一个,它为SQL Server提供了一个答案,但我正在寻找一种在PostgreSQL中实现这一点的方法。
如何只选择 any 列中具有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;
搜索也没有发现任何有用的东西。
2条答案
按热度按时间3df52oht1#
可以使用
NOT(<table> IS NOT NULL)
。the documentation:
如果表达式是行值的,则当行表达式本身为空或所有行的字段都为空时,IS NULL为真,而当行表达式本身为非空且所有行的字段都为非空时,IS NOT NULL为真。
所以:
zf2sa74q2#
得到列和表的列表后,可以使用
LOOP
和EXECUTE
逐一运行它们。这不会以表格的形式给予你答案,但至少你可以通过
RAISE NOTICE
s来观察它,至于我的用例,这只是维护/修补工作的一部分。