Postgres 更新语句
Posted
技术标签:
【中文标题】Postgres 更新语句【英文标题】:Postgres UPDATE statement 【发布时间】:2015-04-14 11:51:21 【问题描述】:我已从 mysql 迁移到 psql,但发现使用多个左连接很难理解 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;
欢迎任何指针。
【问题讨论】:
***.com/search?q=[postgresql]+update+join 当然还有examples in the manual 所有示例仅指一个连接。我需要做多个连接。 一表连接和多表连接在语法上没有区别 您只使用左连接,是否有意 - 将任务表中没有project
的行更新为空?与project
的内部连接类似于UPDATE task SET project_name = p.NAME ,client_name = c.NAME ,user_name = u.NAME FROM project p ON task.project_id = p.id LEFT JOIN client c ON task.client_id = c.id LEFT JOIN user u ON task.user_id = u.id;
。要将LEFT JOIN
与project
一起使用,请执行自连接任务或在SET
部分中使用子查询...
【参考方案1】:
给你:
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
我很想知道是否有更有效的方法
【讨论】:
以上是关于Postgres 更新语句的主要内容,如果未能解决你的问题,请参考以下文章