Postgresql - 当另一列的值匹配时,在两个表之间复制一列

时间:2017-07-21 19:12:22

标签: sql database postgresql

我仍然是postgres和处理数据库的新手。我想要做的是以下几点:

我有两个表(批量已选择)。每个表中都有一个 id 列, selected 表中有一个名为 name 的列。

我要做的是比较两个表中 id 的值,当它们匹配时,将 name 的值从第二个表复制到第一个表中的新列。否则,该值应保持 NULL 。新列已创建并准备好接收数据。我尝试了以下方法:

select id,
  CASE WHEN exists (select 1 from selected where bulk.id = selected.id) THEN selected.names
    ELSE NULL
    END
AS name
FROM bulk;

我不确定这完全没有意义,但这是我研究后最接近的事情。当我运行这个时,我收到以下错误:[42P01]错误:缺少所选表的FROM子句条目

错误是不言自明的,但我不知道如何解决它

任何帮助将不胜感激! 感谢

1 个答案:

答案 0 :(得分:0)

如果要更新列,请使用update。我有点迷失哪个表需要更新,但是这样的事情:

update secondtable t2
        set name = t1.name
    from firsttable t1
    where t2.id = t1.id;

至于你的select,你会这样做:

select b.id,
       (select s.name from selected s where b.id = s.id) as name
from bulk b;

您不需要case。如果没有匹配项,则返回的值为NULL