2015-04-21 29 views
0

我想要做的事情,我假設很簡單,但它讓我難住。postgreSQL:使用JOIN和UPDATE更新另一個表的數據來自另一個表

我有一個傢俱桌子,其中包括一個名爲「類別」(牀,椅子,桌子等)的文本列和一個類別表,它們將這些類別中的每一個在名爲categoryname的列中與類別ID(這是添加的應團隊成員的要求,方便搜索)。

我想根據傢俱表中的類別列與類別表中的類別名稱列是否匹配,使用這些類別ID填充傢俱表中的列。

解決此網站搜索和其他地方後,我決定試試這個:

UPDATE furniture 
SET categoryid = categories.categoryid 
FROM categories 
WHERE categories.categoryname = furniture.category 

其中運行,但沒有任何反應。

我假設這是因爲WHERE語句不足以讓我想要做什麼,我需要某種JOIN語句來顯式鏈接類別表中的類別名稱列與類別列傢俱桌子,但我怎麼做到這一點?我最好的猜測基於其他人的工作是這樣的:

UPDATE furniture 
INNER JOIN categories ON categories.categoryname = furniture.category 
SET furniture.categoryid = categories.categoryid 
WHERE categories.categoryname = furniture.category 

但它只是給我語法錯誤。

(我檢查,以確保類別名稱和類別列匹配的拼寫等方面)

+0

退房這個帖子:http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on -a-id-match?rq = 1 –

+1

您是使用Microsoft SQL Server還是Postgres? –

+0

我正在使用pgAdmin – GraceOmega

回答

2

試試這個

UPDATE f 
SET 
    categoryid = c.categoryid 
from furniture f 
INNER JOIN categories c ON c.categoryname = f.category 

能否再次複製。

+0

似乎沒有工作關係「f」不存在,如果我擺脫了別名,它告訴我表名稱傢俱已被多次指定。 – GraceOmega

2

你應該尊重這句法:

UPDATE furniture 
SET furniture.categoryid = categories.categoryid 
INNER JOIN categories ON categories.categoryname = furniture.category 
WHERE categories.categoryname = furniture.category 
+0

我收到一個錯誤 - 「表名」傢俱「指定不止一次」 – GraceOmega

+0

我的不好,現在應該工作 – Pleasure

相關問題