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

PostgreSQL中ANY与ALL查询小数据集出现异常结果的问询

PostgreSQL中!= ANY与!= ALL的查询逻辑差异解析

场景与查询结果

基础数据集

执行select machine_name from fdr.machine_info;返回结果:K318、K319、K320、K321

四个查询的执行结果

  • 查询1:select machine_name from fdr.machine_info where machine_name = ANY (ARRAY['K319','K318']); → 返回K318、K319
  • 查询2:select machine_name from fdr.machine_info where machine_name != ANY (ARRAY['K319','K318']); → 返回全量数据集(不符合预期)
  • 查询3:select machine_name from fdr.machine_info where machine_name = ALL (ARRAY['K319','K318']); → 无返回结果
  • 查询4:select machine_name from fdr.machine_info where machine_name != ALL (ARRAY['K319','K318']); → 返回K320、K321(符合预期)

逻辑差异解析

= ANY的运行逻辑

= ANY(数组) 对应逻辑或(OR):只要字段值和数组中任意一个元素相等,条件即成立。比如K318匹配数组中的'K318'、K319匹配'K319',所以这两条被筛选出来。

!= ANY的运行逻辑

!= ANY(数组) 同样是逻辑或(OR):只要字段值和数组中任意一个元素不相等,条件就成立。这就是查询2返回全量数据的原因:

  • K318和数组中的'K319'不相等,满足条件;
  • K319和数组中的'K318'不相等,满足条件;
  • K320、K321和数组中两个元素都不相等,自然满足条件。
    所有数据都符合筛选要求,因此返回全量结果。

= ALL的运行逻辑

= ALL(数组) 对应逻辑与(AND):字段值必须和数组中所有元素都相等,条件才成立。没有机器名能同时等于'K319'和'K318',所以查询3无结果。

!= ALL的运行逻辑

!= ALL(数组) 对应逻辑与(AND):字段值必须和数组中所有元素都不相等,条件才成立。也就是排除数组内的所有元素,因此K320、K321符合要求,返回正确结果。

内容的提问来源于stack exchange,提问作者Max Buckethead

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:12:11