【发布时间】:2021-12-17 03:12:49
【问题描述】:
是否有一个 2 列表的示例,(x, y - INTEGER),它给出了说明:
UPDATE tab SET x = y WHERE x != y;
UPDATE tab SET x = y WHERE 1 = 1 OR (NULL IS NOT NULL);
会显示不同的结果吗?
【问题讨论】:
标签: sql postgresql sql-update
是否有一个 2 列表的示例,(x, y - INTEGER),它给出了说明:
UPDATE tab SET x = y WHERE x != y;
UPDATE tab SET x = y WHERE 1 = 1 OR (NULL IS NOT NULL);
会显示不同的结果吗?
【问题讨论】:
标签: sql postgresql sql-update
当然:
CREATE TABLE tab (x integer, y integer);
INSERT INTO tab VALUES (NULL, 1);
/* doesn't update a single row */
UPDATE tab SET x = y WHERE x != y;
TABLE tab;
TABLE tab;
x │ y
════════╪═══
(null) │ 1
(1 row)
/* updates a row */
UPDATE tab SET x = y WHERE 1 = 1 OR (NULL IS NOT NULL);
TABLE tab;
x │ y
═══╪═══
1 │ 1
(1 row)
【讨论】:
在第一条语句中,只有当x 和y 不是nulls 时,x != y 才会计算为真。因此,如果 (x,y), 是值和 null 的任意组合,x 将保持不变。
在第二个语句中,where 条件的计算结果为真,可以完全省略 - 所有x 值都将更新为它们对应的y 值。
【讨论】: