Postgresql 带有联接的Update语句

Postgresql 带有联接的Update语句,postgresql,Postgresql,我必须创建迁移以更新问题图像属性,但我需要检查其他表中的一些属性,我的模式如下所示: question { id, name, groupId, imageUrl -> i need to update this } group { id, name, quizId } quiz { id, name, type -> where type is 'History' } 我需要从表问题中更新属性imageUrl,其中测验类型为“History”,我不确定在使用update

我必须创建迁移以更新问题图像属性,但我需要检查其他表中的一些属性,我的模式如下所示:

question {
id,
name,
groupId,
imageUrl -> i need to update this
}

group {
id, 
name, 
quizId
}

quiz {
id,
name, 
type -> where type is 'History'
}
我需要从表问题中更新属性imageUrl,其中测验类型为“History”,我不确定在使用update时如何加入这些表。我试过类似的方法,但效果不理想

UPDATE question SET image_url = 'pathToImage' FROM quiz q WHERE q.type = 'History'

以这种方式连接三个表:

UPDATE question q 
SET    image_url = 'pathToImage'
FROM   (select g.Id 
        from group g
        JOIN   quiz z
        ON     g.quizID = z.Id
        WHERE  z.type = 'History') p
ON     q.groupId = p.Id;
尝试:


所以这是我提出的最好的解决方案,它对我的迁移非常有效

UPDATE question SET image_url = 'https://path_to_image.com' WHERE id IN (SELECT q.id FROM question q
            JOIN group AS g ON q.groupi_id = g.id
            JOIN quiz AS qu ON qu.id = g.quiz_id
            WHERE qu.type = 'Lifestyle')

因此,基本上我会在子查询中将image_url更新为所有ID为的问题,这是最简单的方法。

可能重复已经检查过的问题,但我无法使用其中的答案:(您需要在问题和测验之间进行连接。您能给我演示如何执行此操作的代码示例吗?我没有Postgress的经验,您需要加入三个表?。我实际上已经有指向图像的链接,因此我需要设置该链接,我不确定如何和在何处设置图像url?在您的示例中,我在“打开”或“ON”附近获得语法错误(最后,您说q.groupId=z.IdI在任何表上都看不到PathToImageField。图像的路径实际上是我要设置的链接,它不是属性,而是图像的实际值。\u urlno-我没有检查它。是否有错误?。请使用DDL和DML更新问题以重现您的环境。)
UPDATE question SET image_url = 'https://path_to_image.com' WHERE id IN (SELECT q.id FROM question q
            JOIN group AS g ON q.groupi_id = g.id
            JOIN quiz AS qu ON qu.id = g.quiz_id
            WHERE qu.type = 'Lifestyle')