这一定是重复的,但我很难在谷歌上找到答案。我有以下的Postgres表:

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

目前countystores的所有值都为空-我只知道它们的zipcode。现在我想通过查找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
);

我猜内部查询将返回一组行,然后逐个插入,但我不知道如何确保它们是“正确”的行集。
不是每个zipcode都会出现在zipcode_to_county表中,因此需要在某个地方使用LEFT JOIN

最佳答案

您应该UPDATE现有行。

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

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

关于sql - 从JOIN插入值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45275415/

10-15 21:31