【发布时间】:2026-01-05 01:30:01
【问题描述】:
我希望了解为什么您可以在数组中将空值作为相等的值进行比较,但不能作为原语进行比较。
例如,以下查询演示:
SELECT NULL = NULL AS does_not_equal
, NULL::bool = NULL::bool AS does_equal
, NULL::int = NULL::int AS does_equal
, NULL::text = NULL::text AS does_equal
, ARRAY[NULL] = ARRAY[NULL] AS does_equal
, ARRAY[NULL]::bool[] = ARRAY[NULL]::bool[] AS does_equal
, ARRAY[NULL]::int[] = ARRAY[NULL]::int[] AS does_equal
, ARRAY[NULL]::text[] = ARRAY[NULL]::text[] AS does_equal
;
我理解为什么 NULL = NULL 对于基元来说是 NULL,而且我也想我理解为什么比较复合类型会为它们中的一个两边都为 null 的字段提供一个真正的比较,主要是因为 *= 运算符看起来在类型的二进制值。但是数组似乎没有使用 *= 运算符,到目前为止,我在搜索中找不到任何解释它的东西。
【问题讨论】:
标签: sql postgresql null