Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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_Sql Server_Sql Server 2008 - Fatal编程技术网

如何编写SQL查询以将两个已排序的表与不同的列水平组合?

如何编写SQL查询以将两个已排序的表与不同的列水平组合?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两张桌子,我想按原样并排摆放。比如说, tableOne tableTwo columnOne | columnTwo | columnThree columnI | columnII | columnIII 这两个表中的数据不需要有任何关联——这两个表具有相同的行计数——并且数据已经在这两个表中进行了排序。基本上,我希望在两个表上执行完全外部联接,而不使用on操作符 如何在SQL查询中做到这一点?好吧,您确实需要一个ON运算符

我有两张桌子,我想按原样并排摆放。比如说,

tableOne                              tableTwo
columnOne | columnTwo | columnThree   columnI | columnII | columnIII
这两个表中的数据不需要有任何关联——这两个表具有相同的行计数——并且数据已经在这两个表中进行了排序。基本上,我希望在两个表上执行
完全外部联接
,而不使用
on
操作符

如何在SQL查询中做到这一点?

好吧,您确实需要一个ON运算符—您似乎只是希望它自动工作,而这不会发生

如果您说tableOne的第1行映射到TableII的第1行,那么您需要在每个表中添加一个行列,然后对其进行联接

如果不指定联接条件,则将执行
交叉联接
,将表1中的每一行联接到表2中的每一行,这显然不是您要查找的

因此,请这样做:

select * from 
  (select *, row_number() over (order by 1) as RN from tableOne) a
  inner join (select *, row_number() over (order by 1) as RN from tableTwo) b
     on a.RN = b.RN
嗯,你确实需要一个ON操作符——你只是想让它自动工作,这是不会发生的

如果您说tableOne的第1行映射到TableII的第1行,那么您需要在每个表中添加一个行列,然后对其进行联接

如果不指定联接条件,则将执行
交叉联接
,将表1中的每一行联接到表2中的每一行,这显然不是您要查找的

因此,请这样做:

select * from 
  (select *, row_number() over (order by 1) as RN from tableOne) a
  inner join (select *, row_number() over (order by 1) as RN from tableTwo) b
     on a.RN = b.RN

查询需要order by表达式来保证行的顺序。数据按哪列排序?表已排序是什么意思?在每个表中有一个列告诉你吗?所以,你知道,你不应该考虑表中的行要“排序”(并且永远不要直接作为索引)。您获得“订单”的唯一方法是在请求时使用
orderby
子句指定它。SQL是专门设计的,因此,除非使用该子句,否则行的顺序并不重要。其他任何事情都会带来麻烦。材料重复:查询需要order by表达式来保证行的顺序。数据按哪列排序?表已排序是什么意思?在每个表中有一个列告诉你吗?所以,你知道,你不应该考虑表中的行要“排序”(并且永远不要直接作为索引)。您获得“订单”的唯一方法是在请求时使用
orderby
子句指定它。SQL是专门设计的,因此,除非使用该子句,否则行的顺序并不重要。其他任何事情都会带来麻烦。材料副本:+1-同意,这是我认为OP想要做的。+1-同意,这是我认为OP想要做的。