问题描述
我有三个表:user
,image
和user_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 = ?