TABLE1
ID
----
1
2
3
4
5
TABLE2
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 Server中使用JOINS来解决上述情况。
答案 0 :(得分:5)
使用 FULL OUTER JOIN
,可以获得预期的结果。
由于没有公共字段,因此,表1中的记录都不应与表2相匹配,反之亦然。因此,也许ON 0 = 1
作为连接条件也将按预期工作。 Thanks Bart Hofland
因此下面的查询也将起作用:
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
答案 1 :(得分:4)
我不明白您为什么要这样做,但是要获得预期的结果,您可以这样做。不过,这不是联接。
SELECT ID, NULL as NAME from Table1
UNION ALL
SELECT NULL, NAME from Table2
编辑后添加
由于该问题特别要求使用联接的解决方案,因此Arulkumar对FULL OUTER JOIN的回答更合适,并且您不必担心列数据类型是什么。