如何查询表中一行内包含至少一个NULL值的记录?
问题原因
你写的SQL本身语法没有报错,但逻辑不符合你的需求,这是PostgreSQL中行表达式IS NULL的语义规则决定的:
- 行表达式
<table> IS NULL的返回结果为真,当且仅当这一行的所有字段值都为NULL,只有全空行才会被匹配到,自然和你要的「至少有一个字段为NULL」的筛选要求不符。
正确写法
针对PostgreSQL 13.4版本,你可以直接用下面的语句实现需求:
SELECT * FROM <table> WHERE NOT (<table> IS NOT NULL);
这个写法的逻辑很好理解:
<table> IS NOT NULL为真的前提是当前行所有字段都不为NULL,对这个条件取反,得到的就是「至少有一个字段为NULL」的行,完全匹配你的需求。
如果你想要更直观的写法,也可以用下面的等效语句:
SELECT * FROM <table> WHERE (<table> IS DISTINCT FROM <table>);
内容的提问来源于stack exchange,提问作者S B
相关产品推荐
相关产品推荐

