2014-10-09 81 views
1

我正在尝试此查询,但不起作用: 这个想法是将数据从一个表复制到另一个表。更新表 - 关系不存在

UPDATE A 
SET  A.name_en = B.name 
FROM country_name as A 
     INNER JOIN country as B 
      ON A.id = B.id 

我收到此错误:

Error in query: ERROR: relation "a" does not exist 
LINE 1: UPDATE A 

为什么?

回答

3

根本不需要额外连接。你正在做的inner join所以你可以只是fromwhere条款,而不是做:

UPDATE country_name 
SET  name_en = B.name 
FROM country AS B 
WHERE counry_name.id = B.id; 

你需要做的UPDATE sometable ... FROM sometable a ... WHERE sometable.id = a.id招的唯一情况是,当你需要做外部联接对阵表更新。

不幸的是,PostgreSQL的UPDATE ... FROM ...功能不允许您使用显式连接语法。

+0

这仍然是一个加入。 – Brandon 2014-10-09 14:55:57

+0

@Brandon当然;我只是说你不需要* self-join *,如果你只需要一个内部连接,你可以从'FROM'子句中再次引用'country_name'。 – 2014-10-09 15:09:35

+0

@CraigRinger第一个例子工作,但不是第二个。 http://sharetext.org/uMTT – user2990084 2014-10-09 15:13:02

1

我认为你需要编写表的真实名称,因为该操作将在查询本身之外进行。为此,该协会将结束。

UPDATE country_name 
SET  A.name_en = B.name 
FROM country_name as A 
     INNER JOIN country as B 
      ON A.id = B.id 
WHERE A.id = B.id; 

从别人的回答中取出了哪里,以确保您的数据库中没有出现错误。

+2

是的,但**不要按照书面运行**,它缺少一个'WHERE'子句来限制'country_name'中的条目更新,该更新与'country_name A'的别名匹配。 – 2014-10-09 14:51:16