如何对 postgresql 中具有联合的查询进行更新?
Posted
技术标签:
【中文标题】如何对 postgresql 中具有联合的查询进行更新?【英文标题】:How to do an update on a query having union in postgrsql? 【发布时间】:2021-03-26 05:38:23 【问题描述】:我有 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,
column2=value,
column3=value
where column4 in(1,2,3)
两个表的列号和名称相同。
上述查询与预期不符。我在这个查询中做错了什么。任何人都可以帮助我。
我是 postgresql 新手。
【问题讨论】:
只需运行两次更新。 UPDATE 不支持 UNION,这里也不需要。 与您的问题无关,但是:Postgres 9.2 是no longer supported,您应该尽快计划升级。 我投票结束是一个错字。union
是一个错字。只需运行两个单独的语句。
【参考方案1】:
虽然我投票关闭是一个错字,但您可以在 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,
column2 = value,
column3 = value
where column4 in (select i.id from ids i);
使用这种结构,您只需要列出一次 id 值。
【讨论】:
以上是关于如何对 postgresql 中具有联合的查询进行更新?的主要内容,如果未能解决你的问题,请参考以下文章
从具有交集和联合但也具有其他独特属性的两个表中进行 SQL 查询
PostgreSQL 中具有特定模式的 Linq 和实体迁移