1

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

我有另一个B简单company_name的表 ,department_namedid。(这是两个有关系的表,但我从中制作了一个视图以使语法更容易。)

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

根据这个问答我试过:

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,所有行都设置为相同的值。

(我也从这里尝试了不同的语法,但得到了预期的语法错误。)

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

4

1 回答 1

1

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

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

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

于 2017-01-24T21:42:28.373 回答