Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用subselect从另一个表更新表_Sql_Postgresql_Sql Update_Sql Subselect - Fatal编程技术网

Sql 使用subselect从另一个表更新表

Sql 使用subselect从另一个表更新表,sql,postgresql,sql-update,sql-subselect,Sql,Postgresql,Sql Update,Sql Subselect,使用postgresql,我有一个表a,其中列有公司名称,部门名称,一些其他数据和部门 我有另一个表B,其中只包含公司名称,部门名称,以及did。(这两个表之间有一个关系,但我从中创建了一个视图以简化语法。) 我想用匹配的名称将行的A.department设置为B.did。这是标准化过程的一部分 根据这一点,我尝试: 但是我得到的结果是,所有行的A.department都设置为相同的值 (我也尝试了与的不同语法,但得到了预期的语法错误。) 为什么不工作,更具体地说,为什么行没有正确匹配。当我在该

使用postgresql,我有一个表
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;