2017-03-29 144 views
0

我必須創建遷移到更新的問題圖像屬性,但我需要從其他表檢查一些屬性,我的模式是這樣的:UPDATE語句加入

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

group { 
id, 
name, 
quizId 
} 

quiz { 
id, 
name, 
type -> where type is 'History' 
} 

,我需要更新從表問題屬性IMAGEURL WHERE測驗類型是例如'歷史',我不知道我怎麼可以加入這個表時使用更新。我嘗試過這樣的東西,但它不像我想要的那樣工作。

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

可能的重複[如何做一個更新+加入PostgreSQL?](http://stackoverflow.com/questions/7869592/how-to-do-an-update-join-in-postgresql) – McNets

+0

已經檢查那麼,但我無法使用答案:( –

+0

你需要連接問題和測驗 – McNets

回答

0

所以這是我想出了最好的解決方案,它完美地工作對我的遷移。

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的子查詢中的所有問題,這是要做到這一點最簡單的方法。

0

JOIN在這樣三個表:

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; 
+0

我其實已經有鏈接圖像,所以我需要設置鏈接,即時消息不知道如何以及在哪裏設置圖像網址與您的例子? –

+0

用你的例子即時獲取語法錯誤在或「附近」(最後一個ON你說q.groupId = z.Id –

+0

編輯現在嘗試它。 – McNets

0

嘗試:

with cte as (
     select q.id qid 
     from question q 
     join "group" g on g.id = groupId 
     join quiz z on z.id = quizId 
     where type = 'History' 
    ) 
    UPDATE question q 
     SET image_url = 'pathToImage' 
    FROM cte.qid = q.id 
+0

您確定您的sql被正確寫入? –

+0

不 - 我沒有檢查它。是否有錯誤?請使用DDL和DML更新問題以重現您的env –