Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
根据Postgresql中的联接设置其他表中的值?_Sql_Postgresql_Join - Fatal编程技术网

根据Postgresql中的联接设置其他表中的值?

根据Postgresql中的联接设置其他表中的值?,sql,postgresql,join,Sql,Postgresql,Join,这是一个非常简单的问题,对不起,但我不知道我做错了什么。我想基于联接将表X中的值添加到表A中。我的SQL命令是直截了当的(在这里的几篇文章中讨论过): 在我看来,这应该将numpts的值添加到tableA中的n列,其中tableA的id等于tableX中的id。该命令将运行,但它会将列n中的所有值设置为1。知道tableX的行数少于tableA可能很重要。我做错了什么 但是,当我执行选择查询而不是更新时,我会得到正确匹配的结果…您需要小心。如果id在tableX中多次出现,则您希望在加入之前进行

这是一个非常简单的问题,对不起,但我不知道我做错了什么。我想基于联接将表X中的值添加到表A中。我的SQL命令是直截了当的(在这里的几篇文章中讨论过):

在我看来,这应该将
numpts
的值添加到
tableA
中的
n
列,其中
tableA
的id等于
tableX
中的
id
。该命令将运行,但它会将
列n
中的所有值设置为1。知道
tableX
的行数少于
tableA
可能很重要。我做错了什么


但是,当我执行
选择
查询而不是
更新
时,我会得到正确匹配的结果…

您需要小心。如果
id
tableX
中多次出现,则您希望在加入之前进行聚合。所以这可能就是你想要的:

UPDATE tableA SET n = x.numpts 
FROM tableX AS x WHERE tableA.id = x.id;
UPDATE tableA
    SET n = x.numpts 
    FROM (SELECT x.id, SUM(x.numpts) as numpts
          FROM tableX x
          GROUP BY x.id
         ) x
    WHERE a.id = x.id;

如果重复不是问题,那么Roman和Oto都为Postgres提供了正确的语法。

您需要小心。如果
id
tableX
中多次出现,则您希望在加入之前进行聚合。所以这可能就是你想要的:

UPDATE tableA
    SET n = x.numpts 
    FROM (SELECT x.id, SUM(x.numpts) as numpts
          FROM tableX x
          GROUP BY x.id
         ) x
    WHERE a.id = x.id;

如果重复不是问题,那么Roman和Oto都为Postgres提供了正确的语法。

感谢大家的快速回答!现在可以了。谢谢你们的快速回答!现在工作。
UPDATE tableA
    SET n = x.numpts 
    FROM (SELECT x.id, SUM(x.numpts) as numpts
          FROM tableX x
          GROUP BY x.id
         ) x
    WHERE a.id = x.id;