Postgresql在一条update语句中更新2个表
我有两个具有相同字段的不同选项卡,如:Postgresql在一条update语句中更新2个表,postgresql,sql-update,multi-query,Postgresql,Sql Update,Multi Query,我有两个具有相同字段的不同选项卡,如: host.enabled, service.enabled. 我如何更新他的from 1 update语句 我试过: UPDATE hosts AS h, services AS s SET h.enabled=0, s.enabled=0 WHERE ctid IN ( SELECT hst.ctid FROM hosts hst LEFT JOIN services srv ON hst.host_id = srv.host_
host.enabled, service.enabled.
我如何更新他的from 1 update语句
我试过:
UPDATE hosts AS h, services AS s SET h.enabled=0, s.enabled=0
WHERE
ctid IN (
SELECT hst.ctid FROM hosts hst LEFT JOIN services srv ON hst.host_id = srv.host_id
WHERE hst.instance_id=1
);
在mysql语法上,此查询的工作方式如下:
UPDATE hosts LEFT JOIN services ON hosts.host_id=services.host_id SET hosts.enabled=0, services.enabled=0 WHERE hosts.instance_id=1
我不太理解你的模式。如果你能摆好小提琴那就太好了 但一般来说,要在一个查询中更新两个表,选项如下: 这就假设您总是希望同时更新这两个 因此,您将在函数中作为多个查询来执行,但它可以由来自客户端的单个SQL语句触发 Postgres允许通用表表达式(带子句)使用数据操作
with changed_hosts as (
update hosts set enabled = true
where host_id = 2
returning *
)
update services set enabled = true
where host_id in (select host_id from changed_hosts);
在这种情况下,WITH语句中的更新将运行并在hosts表上设置标志,然后运行主更新,更新services表中的记录
SQL为这个在
不过,一般来说,在一个事务中进行两次更新可能是最简单、最易读的。这行不通。您的目标是确保两个更新都完成,还是在出现问题时不进行更新?我有一个mysql查询:UPDATE hosts LEFT JOIN services ON hosts.host_id=services.host_id SET hosts.enabled=0,services.enabled=0 WHERE hosts.instance_id=1此查询在mysql上运行良好,但是postgresql不理解这个位置的左连接。这就是为什么我没有为你的postgresql问题提供mysql答案的原因。谢谢,我已经习惯了事务。这个问题是关于一个带有一条语句的解决方案。回答应该是“不,不可能”,然后给出答案alternatives@apflieger除了这是可能的,这就是为什么我把CTE包括在里面。