使用子选择从另一个 table 更新一个 table
Update a table from another table using subselect
使用 postgresql 我有一个 table A
,其中包含列 company_name
、department_name
、一些其他数据和 department
.
我有另一个 table B
,只有 company_name
、department_name
和 did
。 (这是两个 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 一次。
使用 postgresql 我有一个 table A
,其中包含列 company_name
、department_name
、一些其他数据和 department
.
我有另一个 table B
,只有 company_name
、department_name
和 did
。 (这是两个 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 一次。