You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL不等值条件查询时如何获取所有符合要求的行

你遇到的这个现象是SQL三值逻辑的典型表现:任何和NULL的等值、不等值比较结果都不是TRUE也不是FALSE,而是UNKNOWN,WHERE子句只会保留判断结果为TRUE的行,所以name为NULL的行自然就被过滤掉了。

以下是几种可行的查询调整方案:

  • 方案1:显式补充NULL判断,最通用、兼容所有SQL数据库的写法:
select * 
from fruits 
where name <> 'Ananas' OR name IS NULL;
  • 方案2:用PostgreSQL原生支持的IS DISTINCT FROM运算符,专门处理带NULL的等值比较,写法更简洁:
select * 
from fruits 
where name IS DISTINCT FROM 'Ananas';

这个运算符会将NULL视作可比较的有效值,NULL IS DISTINCT FROM 'Ananas'的返回结果直接是TRUE,不需要额外加NULL判断。

  • 方案3:用COALESCE函数对NULL做替换后再比较,适合需要统一处理缺省值的场景:
select * 
from fruits 
where COALESCE(name, '') <> 'Ananas';

注意这个方案的前提是你替换的缺省值(这里用的是空字符串)不会和你要排除的值重合,否则会出现误判。

内容的提问来源于stack exchange,提问作者I am not Fat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:06:04