来自JOIN的INSERT值?

时间:2017-07-24 08:14:59

标签: sql postgresql

这一定是重复的,但我在谷歌搜索答案时遇到了麻烦。我有以下Postgres表:

stores:
   id - integer
   zipcode - varchar
   county - varchar, nullable
zipcode_to_county:
   zipcode - varchar
   county - varchar

目前countystores的所有值都为空 - 我只知道他们的邮政编码。现在,我想通过在county中查找每个商店的zipcode来更新zipcode_to_county列。

我可以用Python编写脚本,但是我可以直接在SQL中编写吗?

或许这样的事情:

INSERT into stores(county) (
  SELECT z.county FROM stores s 
  LEFT JOIN zipcode_to_county z
  WHERE s.zipcode=z.zipcode
);

我猜内部查询将返回一组行,然后逐个插入,但我不知道如何确保他们是"对&#34 ;行集。

并非每个邮政编码都会出现在zipcode_to_county表中,因此需要LEFT JOIN某处。

2 个答案:

答案 0 :(得分:2)

您应UPDATE现有行。

UPDATE stores
SET country = z.country
FROM zipcode_to_county z
WHERE stores.zipcode = z.zipcode;

这里不需要外连接,因为这只会产生额外的NULL值。

答案 1 :(得分:0)

您必须更新stores表。其中一种方法如下:

UPDATE stores
SET county = (SELECT county 
              FROM zipcode_to_county 
              WHERE zipcode_to_county.zipcode = stores.zipcode)