Sql server 如何在没有公共列的情况下使用SQL连接两个表

Sql server 如何在没有公共列的情况下使用SQL连接两个表,sql-server,Sql Server,例如: 表1: Column1 Column2 ----------- ------------- A 1 B 2 D 3 E 4 表2: Column3 Column4 ----------- ------------- A 7 E 9 Z

例如:

表1:

Column1           Column2
-----------       -------------
A                 1
B                 2
D                 3
E                 4
表2:

Column3           Column4
-----------       -------------
A                 7
E                 9
Z                 5
预期产出:

Column1           Column2             Column3            Column4
-----------       -------------       -------------      -------------
A                 1                   A                  7
B                 2                   E                  9
D                 3                   Z                  5
E                 4                   NULL               NULL
我希望输出如图所示

如果有两个表的列为Column1,Coumn2和Column3,Column4,
然后,预期的输出应该是Column1、Column2、Column3、Column4,而不包含任何联接。它应该在表1列的右侧有表2列。如果每个表中的行数不匹配,空值将消耗空行。

您可以使用
行数
窗口函数创建可用于将两个表连接在一起的计算字段:

SELECT t1.Column1, t1.Column2, t2.Column3, t2.Column4
FROM (
   SELECT Column1, Column2,
          ROW_NUMBER() OVER (ORDER BY Column1) AS rn
   FROM Table1) AS t1
FULL OUTER JOIN  (
   SELECT Column3, Column4,
          ROW_NUMBER() OVER (ORDER BY Column3) AS rn
   FROM Table2) AS t2
ON t1.rn = t2.rn
如果
表1
表2
有更多行,则需要
完全外部联接。

这将起作用:-

SELECT Column1, Column2, Column3, Column4 FROM 
(SELECT ROW_NUMBER() OVER(ORDER BY Column1) row, Table1.*
FROM Table1) t1
FULL OUTER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY Column3) row, Table2.*
           FROM Table2) t2
ON t1.row = t2.row

或者,您也可以执行
左联接
而不是
完全外部联接

SELECT Column1
    ,Column2
    ,t.Column3
    ,t.Column4
FROM (
    SELECT ROW_NUMBER() OVER (
            ORDER BY Column1
            ) rn
        ,Table1.*
    FROM Table1
    ) t1
LEFT JOIN (
    SELECT ROW_NUMBER() OVER (
            ORDER BY Column3
            ) AS rn
        ,t2.*
    FROM Table2 t2
    ) t ON t1.rn = t.rn;


注意:当然,只有在
表A
中有更多记录时,才可以使用Row_number()函数向每个表中添加RowNumber。然后只需将RowNumber列上的两个表连接起来。您可以使用完全外部联接,或者如果您知道哪个表将有更多的行,那么您可以使用左侧或右侧外部联接帮助中的任何内容?如果
Table1
的行数少于
Table2
,这将不起作用。啊-很好地发现了…抱歉,漫长的一天!