sql - 将表 A 中的每一行与表 B 中的一行相关联,环绕
问题描述
我想创建一个包含其他两个表中数据组合的表。假设表 ONE 如下所示:
A
B
C
D
E
F
表二看起来像这样:
X
Y
Z
我想要的不是交叉连接或任何东西,我只希望 A 和 B 在一起,当 B 用完行时,重复,所以输出(表三)如下所示:
A X
B Y
C Z
D X
E Y
F Z
我不想添加或删除任何行。最终结果应具有与表 ONE 中完全相同的行数。如果它更容易,表一中的行数总是表二中行数的完美倍数,所以我不必担心部分匹配。如果表 ONE 有 12 行,那么表 2 将重复 4 次而不是 2 次,结果仍然是 12 行。
解决方案
您可以使用模运算:
select o.*, t.*
from (select o.*, row_number() over (order by (select null)) as seqnum
from one o
) o join
(select t.*, row_number() over (order by (select null)) as seqnum,
count(*) over () as cnt
from two
) t
on (o.seqnum - 1) % cnt = t.seqnum - 1
这会为每个表添加一个枚举值。然后它使用模运算来匹配行。
推荐阅读
- python - for循环遍历字典 - python3
- fast-ai - 如何使用 fastai 导入 text.transform
- html - 带有覆盖指针事件的元素不成比例滚动:无;元素
- html - 您如何定位图像,使其部分离开屏幕而不导致出现水平滚动条?
- javascript - 当一个promise在vue js中解决时组合两个数组
- python - 如何获取面板 DateSlider Widget Python 的动态值
- mongodb - 如何在 Mongoose 和 MongoDB 中搜索键值对
- java - 在抽象 java 类中正确使用泛型?
- php - Wordpress 如何从存在于另一个特定类别中的产品中获取类别
- object-detection - 移动相机 3d 检测。我做对了吗?