奇怪的SQL请求(加入)

时间:2012-12-04 05:59:22

标签: sql select join sql-server-2000

假设有两个表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

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_NUMBERFULL OUTER JOIN来结合这两种结果。

请参阅SQL Fiddle

不幸的是,SQL Server 2000没有ROW_NUMBER函数,所以你很难使用带有标识字段的临时表来模拟一个rownumber。

这个要点是

  • 从tableA到#tempTableA选择所需的数据,添加一个标识字段。
  • 对tableB重复
  • 使用临时表来FULL OUTER JOIN结果