使用子选择从另一个 table 更新一个 table

Update a table from another table using subselect

使用 postgresql 我有一个 table A,其中包含列 company_namedepartment_name、一些其他数据和 department.

我有另一个 table B,只有 company_namedepartment_namedid。 (这是两个 table 之间的关系,但我从中做了一个视图以使语法更容易。)

我想将具有匹配名称的行的 A.department 设置为 B.did。它是规范化过程的一部分。

根据这个 Q&A 我试过:

UPDATE A 
SET department=did 
FROM A AS A 
INNER JOIN B 
  ON A.company_name = B.company_name AND A.department_name=B.department_name;

但我得到的结果是,所有行的 A.department 都设置为相同的值。

(我也尝试了与 here 不同的语法,但出现了预期的语法错误。)

为什么这不起作用,更具体地说,为什么行没有正确匹配。当我在该连接上尝试 SELECT 时,我得到了预期的结果。

在 Postgres 中,您想这样编写查询:

UPDATE A 
    SET department = B.did 
FROM B 
WHERE A.company_name = B.company_name AND
      A.department_name = B.department_name;

当您在 FROM 子句中提到 A table 时,它是对 A 单独 引用,与正在更新的 table 无关。简单的解决方案是只引用 table 一次。