2015-04-14 2 views
2

Я перешел из mysql в psql, но мне трудно получить голову вокруг инструкции UPDATE, используя несколько левых объединений.Postgres UPDATE statement

Как бы вы переписали это в Postgres? (Я использую postresql 9.4)

update task t 
    left join project p on t.project_id = p.id 
    left join client c on t.client_id = c.id 
    left join user u on t.user_id = u.id 
set t.project_name = p.name, 
    t.client_name = c.name, 
    t.user_name = u.name; 

Любой указатель будет приветствоваться.

+0

http://stackoverflow.com/search?q=[postgresql]+update+join и, конечно, [примеры в руководстве] (http://www.postgresql.org/docs/current/static/sql-update.html#AEN85309) –

+0

Все примеры относятся только к одному соединению. Мне нужно сделать несколько соединений. – sophia

+0

Нет разницы в синтаксисе между соединением с одной таблицей и соединением с несколькими таблицами –

ответ

0

Здесь вы идете:

WITH task_data AS (
    SELECT t.id, 
     p.name AS project_name, 
     c.name AS client_name, 
     u.name AS user_name 
    FROM task t 
     LEFT JOIN project p ON t.project_id = p.id 
     LEFT JOIN client c ON t.client_id = c.id 
     LEFT JOIN "user" u ON t.user_id = u.id 
) 
UPDATE task t 
FROM task_data d 
SET 
    project_name = d.project_name, 
    client_name = d.client_name, 
    user_name = d.user_name 
WHERE t.id = d.id 

Я бы интересно посмотреть, если есть более эффективный способ