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两次。那会怎样呢?
就我个人而言,我喜欢用于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. 其次,你不必重复任何价值观,减少犯错误的机会。