2017-05-07 76 views
0

这是一个非常简单的问题,很抱歉,但我不知道我在做什么错。我想根据连接将表X中的值添加到表A中。我的SQL命令是直接的(和几个职位在这里讨论):根据Postgresql中的联接设置来自其他表的值?

UPDATE tableA SET n = x.numpts 
FROM tableA AS a, tableX AS x WHERE a.id = x.id; 

这应该在我的眼里tableAnumpts添加值n列其中tableA的ID等于idtableX 。该命令运行,但它将column n中的所有值都设置为1.也许重要的是要知道tableX的行数少于tableA。我究竟做错了什么?

然而,当我做了SELECT查询,而不是UPDATE我得到正确的匹配结果...

回答

3
UPDATE tableA SET n = x.numpts 
FROM tableX AS x WHERE tableA.id = x.id; 
+0

谢谢各位快速回答!现在工作。 –

2
UPDATE tableA 
SET n = tableX.numpts 
FROM tableX 
WHERE tableA.id = tableX.id 
1

你必须要小心。如果idtableX中出现多次,那么您想在加入之前汇总。因此,这可能是你想要什么:

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; 

如果重复不是问题,那么罗马和奥托都提供了专门用于Postgres正确的语法。

相关问题