2017-07-21 41 views
0

我对postgres和处理数据库通常还是一个新手。我所试图做的是以下几点:Postgresql - 在另一列的值匹配时在两个表格之间复制列

我有两个表(散装选择)。每个表中有一个id列,并且有一列名为的名称选定的表中。

什么我试图做的是ID值两个表中比较和它匹配时,从第二个表复制的值更改为新列的第一个表。否则,该值应保持为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子句的表项中选择

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

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

+0

你只是试图选择数据的方式还是你想更新表中的数据? – Nicarus

+0

我想更新。基本上复制名称从选中到批量匹配 – Omar

回答

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

+0

感谢您的帮助。 当我尝试更新代码时,出现语法错误。就在第二行之前。我尝试在名称前添加一个SET,但之后我在最后一行出现错误,登录之前 – Omar

+0

Gordon的代码有一些语法错误。你确实需要'SET',你需要在他的代码中将'ON'改成'WHERE'。 (我用这些更正编辑了他的答案) – Nicarus

+0

感谢Nicarus。 是的,我已经在尝试。但是我正在处理一个非常庞大的数据库,所以它至今仍在处理查询。 一旦我确定它的工作,我会更新答案 – Omar

相关问题