加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:31:46 所属栏目:百科 来源:网络整理
导读:我必须更新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 myt
我必须更新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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读