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

时间:2017-10-28 07:24:23

标签: sql tsql join sql-server-2016

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

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

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

1 个答案:

答案 0 :(得分:0)

只要创建临时表或创建子查询,因为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内部不关心行的顺序并重新洗牌,只要你没有群集分层主键集,用于确定该顺序。