使用postgresql我有一个表A
,其中列company_name
,department_name
,其他一些数据和department
。
我有另一张表B
只有company_name
,department_name
和did
。 (这是两个表之间存在关系的表,但我从中创建了一个视图,使语法更容易。)
我想将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
时,我得到了预期的结果。
答案 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
的单独引用,与正在更新的表无关。简单的解决方案是只参考一次表。