【问题标题】:How to JOIN these 3 tables together in SQL?如何在 SQL 中将这 3 个表连接在一起?
【发布时间】:2021-07-13 11:31:58
【问题描述】:

所以我总共有 3 个表,分别称为 Companies_company c、company_sharedtrainingunit cst 和 Companies_trainingunit ct。我创建的第一个 JOIN 在同一个公司 ID 上加入了 c 和 cst。

SELECT c.id as consuming_company_id, c.name as consuming_company_name, cst.id as channel_connection_id, cst.training_unit_id as channel_id
FROM companies_sharedtrainingunit cst
FULL JOIN companies_company c ON c.id = cst.company_id
ORDER BY company_id ASC

生成一个表格,结果如下

consuming_company_id consuming_company_name channel_connection_id channel_id
1 company_1 2000 100

现在我希望上面创建的这个连接表连接到来自表 c 的相同信息和一个新表 ct ie

SELECT c.id as owned_company_id, c.name as owned_company_name, ct.id as channel_id, ct.name as channel_name, ct.description as channel_description
FROM companies_trainingunit ct
FULL JOIN companies_company c ON c.id = ct.company_id
ORDER BY c.id
owned_company_id owned_company_name channel_id channel_name channel_description
2 company_2 100 channel_100 description_100

我已经尝试加入这两个查询但没有运气:(

我知道他们需要加入他们的频道 ID

最后我正在寻找我的桌子看起来像:

channel_connection_id consuming_company_id consuming_company_name channel_id channel_name channel_description owned_company_id owned_company_name
2000 1 company_1 100 channel_100 description_100 2 company_2

【问题讨论】:

  • 如果您有三个表,每个表的样本数据会很有帮助。此外,您可以设置某种 dbfiddle。显示您“没有运气”的查询。
  • 您提供的数据似乎不匹配。 consuming_company_id不应该和owned_company_id一样吗?
  • @LaurenzAlbe 抱歉应该指定得更好, sumption_company_id 和owned_company_id 是不同的。他们是通过我试图通过这个 JOIN 展示的渠道连接的公司
  • 您显示的结果行之间的连接元素是什么?
  • @LaurenzAlbe the channel_id

标签: sql postgresql join


【解决方案1】:

看来您需要加入 companies_company 两次。此外,内部连接就足够了:

SELECT cst.id as channel_connection_id,
       c1.id as consuming_company_id,
       c1.name as consuming_company_name,
       cst.training_unit_id as channel_id,
       ct.name as channel_name,
       ct.description as channel_description,
       c2.id as owned_company_id,
       c2.name as owned_company_name,
FROM companies_sharedtrainingunit cst
   JOIN companies_company c1 ON c1.id = cst.company_id
   JOIN companies_trainingunit ct ON cst.training_unit_id = ct.id
   JOIN companies_company c2 ON c2.id = ct.company_id
ORDER BY cst.company_id ASC;

【讨论】:

    【解决方案2】:

    我发现很难理解您的数据模型。有名称中带有“trainingunit”的表,但没有 trainingunit ID。相反,您要加入一个“channel_id”。这是为什么呢?

    然后,您将使用完全外部联接来包括没有培训单位的公司和没有公司的培训单位。这有意义吗?

    但是,如果您的查询是正确的并且您想加入它们,那么就这样做吧:

    select *
    from
    (
      SELECT c.id as consuming_company_id, c.name as consuming_company_name, cst.id as channel_connection_id, cst.training_unit_id as channel_id
      FROM companies_sharedtrainingunit cst
      FULL JOIN companies_company c ON c.id = cst.company_id
    ) q1
    (
      SELECT c.id as owned_company_id, c.name as owned_company_name, ct.id as channel_id, ct.name as channel_name, ct.description as channel_description
      FROM companies_trainingunit ct
      FULL JOIN companies_company c ON c.id = ct.company_id
    ) q2 using (channel_id)
    order by channel_id;
    

    【讨论】:

      【解决方案3】:

      我希望以companies 开头的left join 足以获得您想要的行。这符合您的要求吗?

      SELECT c.id as consuming_company_id, c.name as consuming_company_name,
             cst.id as channel_connection_id, cst.training_unit_id as channel_id,
             ct.id as channel_id, ct.name as channel_name, ct.description as channel_description
      FROM companies_company c LEFT JOIN
           companies_sharedtrainingunit cst
           ON c.id = cst.company_id LEFT JOIN
           companies_trainingunit ct
           ON c.id = ct.company_id     
      ORDER BY c.company_id ASC;
      

      【讨论】:

      • 我得到了这个:错误:列引用“company_id”不明确位置:524
      • 还需要有owned_company_id和owned_company_name,这两个公司和消费公司是不同的
      猜你喜欢
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      相关资源
      最近更新 更多