PostgreSQL 更新未按预期工作
Posted
技术标签:
【中文标题】PostgreSQL 更新未按预期工作【英文标题】:PostgreSQL update not working as expected 【发布时间】:2018-08-17 15:52:28 【问题描述】:拥有 20 多年的 MS Access 和 SQL Server 经验,我不是 SQL 新手,但我是 PostgreSQL 新手,遇到的问题让我觉得自己像个菜鸟。我有一个简单的 UPDATE 查询,我想用源视图 m 中的数据更新目标表 d:
UPDATE chgman.tc_data
SET reporttime = m.reporttime, endtime = m.endtime,
itismessage = m.itismessage, shortdesc = m.shortdesc,
longdesc = m.longdesc, severity = m.severity,
tc_source = m.tc_source, tc_state = m.tc_state,
ushr_state = m.ushr_state, mainroad = m.mainroad,
start_location = m.start_location, end_location = m.end_location
FROM
chgman.tc_matched_raw AS m
INNER JOIN
chgman.tc_data AS d ON d.tc_id = m.tc_id;
查询的结果是表 d 中的每一行都填充了视图 m 的第一行中的数据。
我已经为尴尬做好了准备 - 请告诉我我做错了什么......
【问题讨论】:
我想我可能能够回答我自己的问题——事实上,视图是从目标表中获取数据的。我需要将视图保存为临时表,然后运行查询。 【参考方案1】:Postgres 中的 from
/update
与 SQL Server/MS Access 的工作方式略有不同。
这应该做你想做的:
UPDATE chgman.tc_data d
SET reporttime = m.reporttime, . . .
FROM chgman.tc_matched_raw m
WHERE d.tc_id = m.tc_id;
您不要在FROM
子句中重复该表——这是对该表的新引用。
【讨论】:
行得通,@Gordon。用 WHERE 子句替换 JOIN 就可以了。谢谢!以上是关于PostgreSQL 更新未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章