2015-04-14 281 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 

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