假设有两个表A = {a,b}和B = {0,1,2},可以加入
tableA tableB
a 0
b 1
a 2
3
如何获得以下结果 期待结果:
tableA tableB
a-------0
b-------1
null----2
null----3
OR
tableA tableB
a-------2
b-------3
null----0
null----1
只要确保每个表中的元素只出现一次,我尝试了各种连接(内部,完整,交叉),它们都不能实现。有人可以给我一个提示吗?
非常感谢
请查看此问题的链接:http://www.sqlfiddle.com/#!3/9fc21/2
答案 0 :(得分:0)
是一个糟糕的请求。虽然我并没有完全排除一个理智的理由,但是产生这样一种输出的几乎可以忽略不计的原因。
对于SQL Server 2000,您需要通过临时表来获取要压缩的顺序密钥。
SELECT IDENTITY(int,1,1) ID, Value
INTO #tblA
FROM tableA
ORDER BY Value;
SELECT IDENTITY(int,1,1) ID, Value
INTO #tblB
FROM tableB
ORDER BY Value;
SELECT A.Value, B.Value
FROM #tblA A FULL OUTER JOIN #tblB B ON A.ID = B.ID
ORDER BY Coalesce(A.ID, B.ID);
答案 1 :(得分:0)
使用SQL Server 2005
,您可以结合使用ROW_NUMBER
和FULL OUTER JOIN
来结合这两种结果。
请参阅SQL Fiddle
不幸的是,SQL Server 2000
没有ROW_NUMBER
函数,所以你很难使用带有标识字段的临时表来模拟一个rownumber。
这个要点是
FULL OUTER JOIN
结果