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

时间:2017-05-07 11:26:30

标签: sql postgresql join

这是一个非常简单的问题,抱歉,但我不知道自己做错了什么。我想基于连接将表X中的值添加到表A.我的SQL命令很简单(在这里的几篇文章中讨论过):

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

我应该在numpts中将n的值添加到tableA中的tableA列,其中id的ID等于tableX { {1}}。该命令会运行,但会将column n中的所有值设置为1.也许了解tableX的行数少于tableA,这一点非常重要。我做错了什么?

但是,当我执行SELECT查询而不是UPDATE时,我会得到正确匹配的结果...

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

你需要小心。如果在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提供了正确的语法。