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

the*_*uls 4 sql postgresql sql-update

这是一个非常基本的问题,但我找不到更好的方法来做到这一点,而且我感觉我的处理方式是错误的。

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

假设我有一个name值为 的列My Name,我想将其更改为Updated My Name,但是在同一列上,如果我也有该值My Name222,我想将其更新为Updated My Name222。目前我有两个更新 SQL 调用,如下所示:

UPDATE myTable t
SET "name"='My Name' WHERE "name"= 'Updated My Name';
UPDATE myTable t
SET "name"='My Name222' WHERE "name"= 'Updated My Name222';
Run Code Online (Sandbox Code Playgroud)

正如我之前提到的,这确实有效,但我觉得有更好的方法可以连续执行,而不必调用UPDATE myTable t两次。那会怎样呢?

Gor*_*off 5

就我个人而言,我喜欢用于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;
Run Code Online (Sandbox Code Playgroud)

这比显式表达式有一些优点case。首先,它很容易推广——只需向v. 其次,你不必重复任何价值观,减少犯错误的机会。