2014-10-09 22 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