sqlserver-连接结果集中两个表中的列



这是我的模式的简化版本。使用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

您需要某种序列号来将表连接在一起。您可以使用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子句并没有真正指定排序,因此序列号可能不是您所期望的。您确实应该有一个列来指定排序。

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

如果在表之间引入引用完整性,那么这将被强制执行并返回预期的结果。

最新更新