如何在第三个表中没有公共列的情况下连接三个表?

Posted

技术标签:

【中文标题】如何在第三个表中没有公共列的情况下连接三个表?【英文标题】:How to join three tables without having a common column in Third table? 【发布时间】:2017-10-28 07:24:23 【问题描述】:

我有三张桌子,即表 1、表 2、表 3。我可以在 prod_id 列的基础上加入 table1 和 table2(这是常见的,并且将 table2 与外键概念相关联)。

现在我想将 table3 与 table1 和 table2 的结果连接起来,其中 table3 中的所有列都是相同的。我试过 row_number() 但它没有给出正确的结果。

如何在 SQL Server 2016 中执行此操作?

【问题讨论】:

你能提供一些示例数据和表结构吗?连同当前和预期的输出? 【参考方案1】:

只需创建一个临时表或进行子查询,因为 table3 通过某种可计算结果与 table1 和 table2 相关:

SELECT
 t1.col1 + t2.col2 as t12_result,
 t1.col2,
 t2.col2,
INTO #temptable
FROM table1 as t1
left join table2 as t2 on t1.prod_id = t2.prod_id;

SELECT t3.*, temp.*
FROM table3 t3
Left join #templtable temp on temp.t12_result = t3.col_id;

但是,如果您只想加入行号(这意味着没有关系键,表恰好具有相同的长度并且您将它们并排放置),只需在每个表上创建一个 row_number_id 键并加入。 (在这里您需要意识到 SQL 内部保留的行号与您所看到的行号不同)。 您可以在每个表上创建一个人工索引行并连接它们上的表,但这会很棘手,因为 SQL 内部不关心行的顺序并重新排列它们,只要您没有聚类的层次主键集,它决定了该顺序。

【讨论】:

以上是关于如何在第三个表中没有公共列的情况下连接三个表?的主要内容,如果未能解决你的问题,请参考以下文章

拆分表并在没有公共列的情况下执行连接

MySQL:从两个表中获取结果,在第三个中计算匹配项

如何将没有公共列的 2 个表合并到 SSIS 中的 1 个表中?

如何从三个表中插入和连接?

Hibernate:如何在注释中将三个 3 表连接到一个连接表中?

如何加入没有公共列的第四个表