2012-04-01 82 views
2

以下哪項有問題PostgreSQL查詢?如何使用JOIN將列從一張表複製到另一張

UPDATE project_project SET project_project.create_date = assignments.start_date 
FROM project_project 
LEFT JOIN account_analytic_account ON account_analytic_account.id = project_project.analytic_account_id 
LEFT JOIN assignments ON assignments.accounts_ref = account_analytic_account.id 

[SQL] UPDATE project_project SET project_project.create_date = assignments.start_date 
FROM project_project 
LEFT JOIN account_analytic_account ON account_analytic_account.id = project_project.analytic_account_id 
LEFT JOIN assignments ON assignments.accounts_ref = account_analytic_account.id 

[Err] ERROR: table name "project_project" specified more than once 

我試過,

UPDATE pp SET pp.create_date = am.start_date 
FROM project_project as pp 
LEFT JOIN account_analytic_account as aa ON aa.id = pp.analytic_account_id 
LEFT JOIN assignments as am ON am.accounts_ref = aa.id 

[SQL] UPDATE pp SET pp.create_date = am.start_date 
FROM project_project pp 
LEFT JOIN account_analytic_account aa ON aa.id = pp.analytic_account_id 
LEFT JOIN am ON am.accounts_ref = aa.account_analytic_account.id 

[Err] ERROR: relation "pp" does not exist 
LINE 1: UPDATE pp SET pp.create_date = am.start_date 

什麼是正確的語法?

回答

2

有兩個問題,以避免:

在SET列1- =值,不預置的表名或別名column。由於UPDATE tablename只能更新tablename的列,因此它會產生錯誤並且無用。表名的別名可以在其他地方使用,但不能在SET子句中使用。

2-不要重複要在其餘查詢中更新的表的名稱,除非您想專門引發該表的輔助和不相關掃描。

這裏是我的一個修改後的查詢,我希望的建議確實你打算什麼:

UPDATE project_project pp SET create_date = 
(select assignments.start_date FROM account_analytic_account LEFT JOIN assignments 
    ON assignments.accounts_ref = account_analytic_account.id 
WHERE 
account_analytic_account.id = pp.analytic_account_id); 
相關問題