PostgreSQL 中类似的 UPDATE 指令
Similiar UPDATE instruction in PostgreSQL
有没有2列的例子table, (x, y - INTEGER),给出说明:
UPDATE tab SET x = y WHERE x != y;
UPDATE tab SET x = y WHERE 1 = 1 OR (NULL IS NOT NULL);
会显示不同的结果吗?
当然可以:
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
不是 null
时,x != y
才计算为真。因此,如果 (x,y) 是一个值和一个 null
的任意组合,x
将保持不变。
在第二条语句中,where
条件的计算结果为真,可以完全省略 - 所有 x
值都将更新为相应的 y
值。
有没有2列的例子table, (x, y - INTEGER),给出说明:
UPDATE tab SET x = y WHERE x != y;
UPDATE tab SET x = y WHERE 1 = 1 OR (NULL IS NOT NULL);
会显示不同的结果吗?
当然可以:
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
不是 null
时,x != y
才计算为真。因此,如果 (x,y) 是一个值和一个 null
的任意组合,x
将保持不变。
在第二条语句中,where
条件的计算结果为真,可以完全省略 - 所有 x
值都将更新为相应的 y
值。