2017-03-15 99 views
0

我在我的公司中使用Postgresql作爲主存儲,並且我努力實現涉及三個不同表的更新查詢。涉及三個表的複雜更新

這裏是模式:

  • 表1已ENTITY_ID,ENTITY_TYPE和COMPANY_ID(引用Company.id)列。
  • 公司有id列
  • Special_company具有ID(其對應於Table1.entity_id)和COMPANY_ID(參照Company.id)

我想更新表1中的所有行,其中Table1.entity_type = 'SpecialCompany'爲了填寫Table1.company_id這樣的:

Table1.entity_id = SpecialCompany.id and SpecialCompany.company_id = Company.id

我已經開始類似的東西:

UPDATE Table1 
SET company_id = (select c.id 
        FROM company c 
        INNER JOIN special_company w ON c.id=w.company_id 
        WHERE w.id=709) 
WHERE entity_type='SpecialCompany' AND entity_id=709; 

但我無法用所有替代709,其中Table1.entity_type = 'SpecialCompany'

任何幫助將不勝感激。

回答

1

我回答我的問題,因爲我找到了解決辦法:

UPDATE Table1 t SET company_id = c.id FROM Company c
INNER JOIN special_company w ON c.id=w.company_id WHERE t.entity_type = 'SpecialCompany' AND t.entity_id=w.id;

感謝@Krishna您的幫助!

+0

我沒有時間看看這個。我的查詢在MSSQL中工作。我沒有意識到這是Postgre。對於那個很抱歉。 – Krishna

1

我假設你正在尋找這樣的東西。

update t 
set t.company_id=c.id 
from 
Company C 
INNER JOIN special_company w ON c.id=w.company_id 
INNER JOIN Table1 t on t.entity_id=w.entity_id 
Where t.entity_type = 'SpecialCompany' 
+0

感謝您的幫助。這樣做,在第一行中給我一個錯誤:'UPDATE t SET ^ ********** Error ********** 錯誤:關係「t 「不存在 SQL狀態:42P01 字符:112''' –