代码之家  ›  专栏  ›  技术社区  ›  theJuls

用postgres更新同一表中具有不同值的列

  •  4
  • theJuls  · 技术社区  · 8 年前

    这是一个非常基本的问题,但我找不到更好的方法来解决这个问题,我觉得我的做法是错误的。

    基本上,我在表的列中有两个值,我想更新为两个不同的值。

    所以说我有专栏 name 有价值的 My Name Updated My Name ,但是在同一列上,如果我也有 My Name222 ,我想将其更新为 Updated My Name222

    UPDATE myTable t
    SET "name"='My Name' WHERE "name"= 'Updated My Name';
    UPDATE myTable t
    SET "name"='My Name222' WHERE "name"= 'Updated My Name222';
    

    如前所述,这确实有效,但我觉得有一种更好的方法可以背对背地做,而不必打电话 UPDATE myTable t

    3 回复  |  直到 8 年前
        1
  •  3
  •   klin    8 年前

    有一种方法可以在单个语句中使用 case :

    update my_table
    set name = case name 
        when 'My Name' then 'Updated My Name'
        else 'Updated My Name222'
        end
    where name in ('My Name', 'My Name222');
    

    在这种情况下,两个独立的更新更简单,也更自然。

    update my_table
    set name = concat('Updated ', name)
    where name in ('My Name', 'My Name222');
    
        2
  •  3
  •   Gordon Linoff    8 年前

    就我个人而言,我喜欢用 values() 对于这类事情:

    update my_table
        set name = newname 
        from (values ('My Name', 'Updated My Name'),
                     ('My Name222', 'Updated My Name222')
             ) v(oldname, newname)
        where name = oldname;
    

    case 表达。首先,它很容易泛化——只需将更多行添加到 v . 第二,你不必重复任何价值观,减少犯错的机会。

        3
  •  1
  •   Ramji    8 年前

    另一种方式

        UPDATE tablename
        SET name = CASE WHEN name = 'Updated My Name' THEN 'My Name'
                      WHEN  name = 'Updated My Name222' THEN 'Name222'
    
                 END
    where name in ('My Name', 'My Name222');