2017-03-15 78 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''' –