在PostgreSQL中的一个查询中使用不同的主键更新多行?

我必须更新PostgreSQL 9.1中许多行的许多列.我目前正在使用许多不同的UPDATE查询,每个查询工作在不同的行(基于主键):
UPDATE mytable SET column_a = 12,column_b = 6 WHERE id = 1;
UPDATE mytable SET column_a = 1,column_b = 45 WHERE id = 2;
UPDATE mytable SET column_a = 56,column_b = 3 WHERE id = 3;

我必须做几千个这样的查询.

有没有可以在PostgreSQL中的一个查询中“批量更新”大量的行?如果你正在使用INSERT,你可以一次插入多行:(INSERT INTO mytable(column_a,column_b)VALUES((12,6),(1,45));),有UPDATE吗?

就像是:

UPDATE mytable SET (id,column_a,column_b) FROM VALUES ( (1,12,(2,1,45),(3,56,3),… )

??

重要的是每个“VALUE”只会更新一行(基于WHERE id =).每行将具有相同的固定数量的列,需要更新,但每行将为每列具有不同的值,因此UPDATE mytable SET column_a = 12,column_b = 6 WHERE id IN(1,2,3);不行

是的,您可以(通常是SQL中的首选项)一次更新多个行.有几种方法可以做到这一点,但最可读性和优雅性我认为是使用带有id和值的派生表:
update mytable as m set
    column_a = c.column_a,column_b = c.column_b
from (values
    (1,3)
) as c(id,column_b)
where c.id = m.id

不太可读,但更明显的解决办法就是用例:

update mytable set
    column_a = case id when 1 then 12 when 2 then 1 when 3 then 56 end,column_b = case id when 1 then 6 when 2 then 45 when 3 then 3 end
where id in (1,3)

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...