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

前端之家收集整理的这篇文章主要介绍了在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)

猜你在找的Postgre SQL相关文章