Sql 使用subselect从另一个表更新表
使用postgresql,我有一个表Sql 使用subselect从另一个表更新表,sql,postgresql,sql-update,sql-subselect,Sql,Postgresql,Sql Update,Sql Subselect,使用postgresql,我有一个表a,其中列有公司名称,部门名称,一些其他数据和部门 我有另一个表B,其中只包含公司名称,部门名称,以及did。(这两个表之间有一个关系,但我从中创建了一个视图以简化语法。) 我想用匹配的名称将行的A.department设置为B.did。这是标准化过程的一部分 根据这一点,我尝试: 但是我得到的结果是,所有行的A.department都设置为相同的值 (我也尝试了与的不同语法,但得到了预期的语法错误。) 为什么不工作,更具体地说,为什么行没有正确匹配。当我在该
a
,其中列有公司名称
,部门名称
,一些其他数据和部门
我有另一个表B
,其中只包含公司名称
,部门名称
,以及did
。(这两个表之间有一个关系,但我从中创建了一个视图以简化语法。)
我想用匹配的名称将行的A.department
设置为B.did
。这是标准化过程的一部分
根据这一点,我尝试:
但是我得到的结果是,所有行的A.department
都设置为相同的值
(我也尝试了与的不同语法,但得到了预期的语法错误。)
为什么不工作,更具体地说,为什么行没有正确匹配。当我在该联接上尝试
选择时,我得到了预期的结果。在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
表时,它是对A
的单独引用,与正在更新的表无关。简单的解决方案是只引用该表一次。@AminNegm Awad:这也是:“请注意,目标表不得出现在from_列表中,除非您打算进行自联接”,感谢提供更多信息。我尝试了一种类似于在参考问答中找到的方法,这对我来说似乎是直觉。因此,我猜测这是一个纯粹的语法问题,没有看到文档中的提示。您链接到的两个问题都是针对SQL Server的,而不是针对PostgresYs的,我不希望出现更多的语法差异。
UPDATE A
SET department = B.did
FROM B
WHERE A.company_name = B.company_name AND
A.department_name = B.department_name;