如果我有两个表(t1,t2),每个表只有一列
t1      
letters  
a         
b         
c         
t2
nums
1
2
3
是否有可能以一种产生两列结果集的方式将两者“连接”在一起,如下所示:
letters nums
a       1
b       2
c       3
解决方案要求:
优点:-如果两个表的行数不同,则最终结果集将是两个表的最大值的计数,并且“丢失”数据为null。
只是想知道在给定约束的情况下这是否可能。
您要使用row_number()。但是,SQL表表示无序集,因此您需要一列来指定顺序。
这个想法是:
select l.letter, n.number
from (select l.*, row_number() over (order by ?) as seqnum
      from letters l
     ) l join
     (select n.*, row_number() over (order by ?) as seqnum
      from numbers n
     ) n
     on l.seqnum = n.seqnum;
的?是,指定排序列。
如果要在两个表中都包含所有行,请使用full join而不是内部联接。
EDTI:
row_number() 是显而易见的解决方案,但是您可以使用相关子查询(假定值是唯一的)来执行此操作:
select l.letter, n.number
from (select l.*, 
             (select count(*) from letters l2 where l2.letter <= l.letter) as seqnum
      from letters l
     ) l join
     (select n.*, 
             (select count(*) from numbers n2 where n2.num <= n.num) as seqnum
      from numbers n
     ) n
     on l.seqnum = n.seqnum;
我发现不使用row_number()它的限制相当荒谬,因为它是几乎所有数据库都支持的ISO / ANSI标准函数。