postgreSQL根据ID匹配从一个表更新到另一个表

时间:2016-11-02 11:13:47

标签: sql postgresql select inner-join

我有一个包含sitescounties的数据库。每个站点都位于一个县。在sites表中,已经提到了该县,但我想将其替换为ID,而在另一个表中。

我的更新代码如下:

UPDATE sites
SET cgid = c.gid 
FROM (select c.gid as a from counties c
INNER JOIN sites s
ON c.name = s.county) p;

sites已更新,但cgid列中的每个值都相同(第一个县的ID)。我能做些什么来获得正确的价值观?

3 个答案:

答案 0 :(得分:4)

update语句中不应重复from语句的目标表

所以我想你想要这个:

UPDATE sites s
  SET cgid = c.gid 
FROM counties c 
where c.name = s.county;

这假定counties.namesites.county都是唯一的。

答案 1 :(得分:0)

UPDATE sites AS s
SET cgid = c.gid
FROM counties AS c
WHERE c.name = s.county

答案 2 :(得分:0)

您不需要JOIN。相反,您只需要连接WHERE子句中的两个表:

UPDATE sites s
    SET cgid = c.gid 
    FROM counties c
    WHERE c.name = s.county;