2012-06-06 131 views
3

我有2個表:圖例臨時。 temp有一個ID和帳戶ID,圖例有advent_id,account_id和其他列。 temp中的ID和legend中的advent_id類似。 account_id列爲空,我想將相關的account_id從temp導入到圖例。我正在使用PostgreSQL。插入一列從一個表到另一個約束

我正在嘗試下面的查詢,但它不工作,因爲我期待。新行正在創建,並且account_id被添加到新行中,而不是添加到相應的advent_id。

insert into legend(account_id) 
select temp.account_id 
from legend, temp 
where legend.advent_id=temp.id; 

它將account_id插入錯誤的地方,而不是相應的advent_id。

我使用下面的查詢檢查:

select advent_id, account_id from legend where account_id is not null; 

究竟是什麼在我的插入查詢的問題?

+0

http://www.w3schools.com/sql/sql_insert_into_select.asp – xameeramir

回答

8

如果您嘗試修改現有行而不是添加行,則需要使用UPDATE查詢,而不是INSERT查詢。

可以使用連接表作爲UPDATE的目標;在你的榜樣:

UPDATE legend 
JOIN temp 
SET legend.account_id = temp.account_id 
WHERE(temp.id = legend.advent_id); 
+0

是否可以做到人無加入? –

+1

'JOIN'在這裏非常重要 - 我想如果你只是想更新一個特定的'advent_id',你可以做一些子查詢 – gcbenison

+0

它給我一個錯誤: 更新legend_backup加入temp set legend_backup.account_id = temp。 account_id其中temp.id = legend_backup.advent_id; 錯誤:語法錯誤在「加入」時出現在字符22 LINE 1:更新legend_backup加入temp set legend_backup.account_id = ... –