在 sql 服务器中连接没有公共列的表

Joining tables without a common column in sql server

表 1

ID  
----                        
1                           
2                           
3                           
4                           
5      

表 2

Name
----
Z
Y
X
W
V                           

预期输出:

ID              Name
-------------------------
1               NULL
2               NULL
3               NULL
4               NULL
5               NULL
NULL             Z
NULL             Y
NULL             X
NULL             W
NULL             V

我需要通过在 SQL 服务器中使用 JOINS 来解决上述情况。

我不明白你为什么想要这个,但要获得预期的结果,你可以这样做。不过,这不是联接。

SELECT ID, NULL as NAME from Table1
UNION ALL
SELECT NULL, NAME from Table2

编辑添加

由于问题特别要求使用连接的解决方案,因此 Arulkumar 的 FULL OUTER JOIN 答案更合适,您不必担心列数据类型是什么。

使用FULL OUTER JOIN,可以得到预期的结果。

由于没有公共字段,Table1 中的记录不应与 Table2 匹配,反之亦然。所以也许 ON 0 = 1 作为连接条件也将按预期工作。

所以下面的查询也可以工作:

SELECT T1.Id, T2.[Name]
FROM Table1 T1
FULL OUTER JOIN Table2 T2 ON 0 = 1;

SELECT T1.Id, T2.[Name]
FROM Table1 T1
FULL OUTER JOIN Table2 T2 ON T2.[Name] = CAST(T1.Id AS VARCHAR(2));

示例数据演示:

DECLARE @Table1 TABLE (Id INT);

INSERT INTO @Table1 (Id) VALUES
(1),                           
(2),                           
(3),                           
(4),                           
(5);  

DECLARE @Table2 TABLE ([Name] VARCHAR(1));

INSERT INTO @Table2 ([Name]) VALUES
('Z'),
('Y'),
('X'),
('W'),
('V');

SELECT T1.Id, T2.[Name]
FROM @Table1 T1
FULL OUTER JOIN @Table2 T2 ON 0 = 1;

输出:

Id      Name
-----------------
1       NULL
2       NULL
3       NULL
4       NULL
5       NULL
NULL    Z
NULL    Y
NULL    X
NULL    W
NULL    V