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

PostgreSQL两条UPDATE语句执行结果不同的两列整数表示例查询

结论

存在,当表中包含x或y为NULL的记录时,两条UPDATE语句的执行结果存在明显差异。

原因分析

  • 第一条UPDATE语句的WHERE条件为x != y:在PostgreSQL的三值逻辑规则下,只要参与比较的任意一个值为NULL,比较运算的返回结果就是NULL,而WHERE条件仅会命中返回值为TRUE的行,NULL会被视为不满足条件。也就是说只要x为NULL、或y为NULL、或两者均为NULL的行,都不会被第一条语句匹配到。
  • 第二条UPDATE语句的WHERE条件为1 = 1 OR (NULL IS NOT NULL):逻辑OR运算只要存在一个为TRUE的子条件,整体条件就为TRUE。此处1=1恒为真,因此整个WHERE条件恒成立,会匹配表中所有的行。

验证示例

我们可以通过以下测试代码验证差异:

-- 创建测试表
CREATE TABLE tab (x INTEGER, y INTEGER);
-- 插入包含NULL的测试数据
INSERT INTO tab VALUES (1, 2), (NULL, 3), (4, NULL), (NULL, NULL), (5,5);

第一条语句执行后结果

仅(1,2)满足x != y被更新为(2,2),其余行无变化,最终数据:

(2,2), (NULL,3), (4,NULL), (NULL,NULL), (5,5)

第二条语句执行后结果

所有行都被匹配执行赋值,最终数据:

(2,2), (3,3), (NULL,NULL), (NULL,NULL), (5,5)

二者结果显然不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:07