首页 > 解决方案 > 如何在Postgresql中将表的每一行扩展为可变数量的行

问题描述

我有一个表,它定义了具有给定迭代次数的对象,假设这是一个轮数可变的游戏。

# select * from game;

game_id | num_rounds
--------+-----------
A       | 2
B       | 3
C       | 1

我想创建一个选择语句,它将为每场比赛生成一个每轮一行的表格。

# select ???;

game_id | round_number
--------+-------------
A       | 1
A       | 2
B       | 1
B       | 2
B       | 3
C       | 1

标签: sqlpostgresqlrecursive-querylateral-join

解决方案


不需要子查询和加入generate_series()。横向连接更简单,更有效:

select g.game_id, s.round_number
from game g
cross join lateral generate_series(1, g.num_rounds) as s(round_number)
order by g.game_id, s.round_number

推荐阅读