奇怪的SQL请求(加入)
假设有两个表A={A,b}和b={0,1,2},它们可以联接奇怪的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,但没有一个能做到这一点。谁能给我小费吗 多谢各位 请查看问题本身的链接:这是一个糟糕的请求。
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);