gpt4 book ai didi

sql - 严格按顺序将两个表连接在一起

转载 作者:行者123 更新时间:2023-12-04 14:35:06 25 4
gpt4 key购买 nike

如果我有两个表(t1,t2),每个表都有一列

t1      
letters
a
b
c

t2
nums
1
2
3

是否有可能以产生如下所示的两列结果集的方式将两者“连接”在一起:

letters nums
a 1
b 2
c 3

解决方案要求:

  • 必须按照指定的顺序组合每个表的数据,以便能够在加入之前对每个表的数据进行排序
  • 不使用任何函数(如 row_number)来添加额外的列以加入

奖励积分: - 如果两个表有不同的行数,最终结果集是两个表的最大值的计数,“缺失”的数据为空。

只是想知道考虑到限制这是否可能。

最佳答案

您想使用 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 标准函数。

关于sql - 严格按顺序将两个表连接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57104320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com