问题描述
我有 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 值一次。