2015-04-14 190 views
2

我已經從mysql移動到psql,但很難讓我的頭繞着使用多個左連接的UPDATE語句。Postgres UPDATE語句

你會如何在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 

我會很好奇,想看看是否有更有效的方式