如何编写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想要做的。