Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的SQL请求(加入)_Sql_Select_Join_Sql Server 2000 - Fatal编程技术网

奇怪的SQL请求(加入)

奇怪的SQL请求(加入),sql,select,join,sql-server-2000,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 或 只要确保每个表中的元素只出现一次,我尝试了各种joininner、full、cross,但没有一个能做到这一点。谁能给我小费吗 多谢各位 请查看问题本身的链接:这是一个糟糕的请求。

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

只要确保每个表中的元素只出现一次,我尝试了各种joininner、full、cross,但没有一个能做到这一点。谁能给我小费吗

多谢各位

请查看问题本身的链接:

这是一个糟糕的请求。虽然我不完全排除一个理智的原因,但我想到产生这样一个输出的原因几乎可以忽略不计

对于SQLServer2000,您需要遍历临时表以获得一个要压缩的顺序键

  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);
使用SQL Server 2005,您可以使用行号和完整外部联接的组合来组合这两个结果

不幸的是,SQLServer2000没有ROW_NUMBER函数,因此您必须使用带有标识字段的临时表来模拟行数

其要点是

从tableA中选择所需的数据,并添加标识字段。 重复表B 使用诱惑词将结果完全外部连接起来
您使用的是什么DBMS?在什么条件下,您将a与0匹配,而不是与1匹配?假设这两个表可以合并。无论它是一个0或1,我只希望它可以被区分。我不想要a-0,a-1,a-2,b-0,b-1,b-2谢谢你的快速回答,我非常感激。我想我的描述不是很清楚。联接条件不是唯一的,因此无法为它们分配唯一ID以联接它们。假设它们的连接条件是相同的值,您能区分结果吗?@user1874700-添加标识ROWNUM的全部目的是使每一行都是唯一的。你试过了吗?你试过我设置的吗?我新设置了一个新表,这正是问题本身,请看一看。你有没有尝试过我的查询,只对value->achar和value->anumber中的字段名做了很小的更改?谢谢Lieven,我刚刚改写了问题,Sry for the confusionHi Lieven,您介意检查此链接并修改查询吗。
  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);