PostgreSQL从另一个表中更新了一个表,该表连接了许多对

问题描述

我有三个表:userimageuser_images_image(前两个与ManyToMany相关)。我想将profile_pic表的user设置为从name获取image属性的值。

我知道如何为这样的事情建立SELECT查询,但这不是很有帮助... 我会写这样的东西:

SELECT "user".id,image.name FROM "user"
LEFT JOIN user_images_image uii ON "user".id = uii."userId"
LEFT JOIN image ON uii."imageId" = image."id"
WHERE "user".id = 2;

在Postgresql中,我不能像在MysqL中那样仅连接两个表。

如何编写这样的查询

解决方法

在Postgres中,您将使用如下所示的update / join语法:

update "user" u
set profile_pic = i.name
from user_images_image uii
inner join image i on uii."imageId" = i."id"
where uii."userId" = u.id and u.id = ? and i.id = ?

如果没有丢失的图像,则可以选择相关子查询:

update "user" u
set profile_pic = (
    select i.name
    from user_images_image uii
    inner join image i on uii."imageId" = i."id"
    where uii."userId" = u.id and i.id = ?
) 
where u.id = ?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...