使用子选择

时间:2017-01-24 21:39:06

标签: sql postgresql sql-update sql-subselect

使用postgresql我有一个表A,其中列company_namedepartment_name,其他一些数据和department

我有另一张表B只有company_namedepartment_namedid。 (这是两个表之间存在关系的表,但我从中创建了一个视图,使语法更容易。)

我想将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时,我得到了预期的结果。

1 个答案:

答案 0 :(得分:1)

在Postgres中,您希望编写如下查询:

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

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