【问题标题】:Complex update with three tables involved涉及三个表的复杂更新
【发布时间】:2017-03-16 21:47:39
【问题描述】:

我在公司中使用 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;

但我无法用所有Table1.entity_id 替换709,其中Table1.entity_type = 'SpecialCompany'

任何帮助将不胜感激。

【问题讨论】:

    标签: sql postgresql


    【解决方案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'
    

    【讨论】:

    • 感谢您的帮助。这样做,在第一行给我一个错误:UPDATE t SET ^ ********** Error ********** ERROR: relation "t" does not exist SQL state: 42P01 Character: 112
    【解决方案2】:

    我正在回答我的问题,因为我找到了解决方案:

    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 的帮助!

    【讨论】:

    • 我没有时间研究这个。我的查询在 MSSQL 中工作。我没有意识到这是针对 Postgre 的。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多