【问题标题】:How to copy column from one table to another using JOIN如何使用 JOIN 将列从一个表复制到另一个表
【发布时间】:2012-04-01 11:41:20
【问题描述】:

以下 PostgreSQL 查询有什么问题?

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  

正确的语法是什么?

【问题讨论】:

    标签: sql postgresql join sql-update


    【解决方案1】:

    有两个问题需要避免:

    1- 在 SET column=value 中,不要将表名或别名添加到 column。它会产生错误并且无论如何都没用,因为UPDATE tablename 只能更新来自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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2012-08-12
      • 2012-07-21
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多