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

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

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

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

回答(1)

2 years ago

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