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

PostgreSQL中含NULL的数组与行类型比较结果差异原因咨询

数组与行类型含NULL时比较结果差异的原因

1. 数组比较的规则

PostgreSQL中数组的相等比较(=)有特殊处理逻辑:当两个数组的元素数量一致,且对应位置的元素要么相等,要么都是NULL时,数组比较结果为TRUE。

比如执行select array[1,null]=array[1,null];时,第一个元素1=1判定为TRUE,第二个位置的两个元素都是NULL,会被视为匹配,因此整个数组比较返回TRUE。

2. 行类型比较的规则

行类型(如(1,null)这种行值构造器生成的类型)的比较遵循标准SQL的NULL逻辑:NULL和任何值(包括另一个NULL)的比较结果都是NULL。

执行select (1,null)=(1,null);时,第一个元素1=1为TRUE,但第二个元素NULL=NULL的结果是NULL,行比较的结果由所有元素的比较结果共同决定,只要有一个元素的比较结果为NULL,整个行比较的结果就会是NULL。

官方文档相关说明

  • 数组操作符:PostgreSQL官方文档明确指出,数组相等操作符=要求两个数组的元素数量相同,且每个对应位置的元素都相等;当对应位置的元素都是NULL时,判定为相等。
  • 行类型比较:行值的比较遵循SQL布尔运算规则,涉及NULL的比较会传播NULL结果;若要让含NULL的行比较返回TRUE,可以使用IS NOT DISTINCT FROM操作符,比如select (1,null) IS NOT DISTINCT FROM (1,null);会返回TRUE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:00:58