【问题标题】:Similiar UPDATE instruction in PostgreSQLPostgreSQL 中类似的 UPDATE 指令
【发布时间】: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


    【解决方案1】:

    当然:

    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)
    

    【讨论】:

    • 非常感谢您提供的示例。
    【解决方案2】:

    在第一条语句中,只有当xy 不是nulls 时,x != y 才会计算为真。因此,如果 (x,y), 是值和 null 的任意组合,x 将保持不变。

    在第二个语句中,where 条件的计算结果为真,可以完全省略 - 所有x 值都将更新为它们对应的y 值。

    【讨论】:

    • 非常感谢您解释这两个语句之间的区别!
    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多