2012-04-01 5 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 

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] 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 

내가 시도

을 준다?

답변

2

피하기 위해 두 가지 문제가 있습니다 : SET 열에서

1- = 값 column에 테이블 이름이나 별칭을 붙일하지 않습니다. UPDATE tablenametablename의 열만 업데이트 할 수 있기 때문에 오류가 발생하고 쓸모가 없습니다. 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); 
관련 문제