2012-04-01 83 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); 
相关问题