如何在第三个表中没有公共列的情况下连接三个表?
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 内部不关心行的顺序并重新排列它们,只要您没有聚类的层次主键集,它决定了该顺序。
【讨论】:
以上是关于如何在第三个表中没有公共列的情况下连接三个表?的主要内容,如果未能解决你的问题,请参考以下文章
如何将没有公共列的 2 个表合并到 SSIS 中的 1 个表中?