我必须更新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)