首页 > 解决方案 > PostgreSQL 更新未按预期工作

问题描述

凭借 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 的第一行的数据。

我已经为尴尬做好了准备 - 请告诉我我做错了什么......

标签: sqlpostgresqlviewsql-update

解决方案


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子句中重复该表——这是对该表的新引用。


推荐阅读