连接结果集中2个表的列

时间:2014-04-25 00:14:38

标签: sql-server tsql sql-server-2012

这是我的架构的简化版本。使用Sql Server 2012企业版。

CREATE table #abc (a INT , b INT);  
CREATE TABLE #def ( a INT , c INT ,d INT);

INSERT INTO #abc values(1,23),(1,24);  
INSERT INTO #def VALUES(1,53,54),(1,56,57)

表#abc加入#def ON COLUMN a

基本上它是基于列a的两个表的行的串联。尝试内部联接\交叉应用但它们都可以理解地导致交叉连接类型的结果集。我有使用另一个临时表(然后更新)的解决方法,但有点觉得这可以在单个选择中轻松完成。我在这里缺少一些简单的东西。

需要这样的输出:

a   b   c   d
1   23  53  54
1   24  56  57

感谢
-N

2 个答案:

答案 0 :(得分:0)

您需要在每一行中都有一个唯一的键值才能以您希望的方式连接表。然后,内部联接将返回您需要的结果集。

如果在表之间引入参照完整性,则会强制执行此操作并返回预期结果。

答案 1 :(得分:0)

您需要某种序列号来将表连接在一起。您可以使用row_number()生成一个,如下所示:

select a.a, a.b, d.c, d.d
from (select a.*, row_number() over (order by (select NULL)) as seqnum
      from #abc a
     ) a join
     (select d.*, row_number() over (order by (select NULL)) as seqnum
      from #def d
     ) d
     on a.seqnum = d.seqnum;

现在谨慎,谨慎,谨慎。 order by子句并没有真正指定顺序,因此序列号可能不是您所期望的。你应该有一个列来指定排序。