如何对 postgrsql 中具有联合的查询进行更新?

问题描述

我有 2 个表,名称为 test 和 test_snapshop。在测试表中,我正在保存当前数据,而在 test_snapshot 中,我正在保存旧数据。现在我需要对一些 id 值进行更新。这可能是一些 id 存在于测试中,而另一些存在于快照表中。

我是这样试的

update test 
  set column1=value,column2=value,column3=value 
where column4 in(1,2,3)
union
update test_snapshot 
  set  column1=value,3)

两个表具有相同的列号和名称

上述查询与预期不符。我在这查询中做错了什么。任何人都可以帮助我吗。

我是 postgresql 的新手。

解决方法

虽然我投票关闭作为一个错字,你可以在 Postgres 中使用一条语句来表达这一点。我可能会去:

with ids as (
      select *
      from (values (1),(2),(3)) v(id)
     ),t as (
      update test 
          set column1 = value,column2 = value,column3 = value 
          where column4 in (select i.id from ids i)
     )
update test_snapshot 
    set column1 = value,column3 = value 
     where column4 in (select i.id from ids i);

使用这种结构,您只需列出 id 值一次。