PostgreSQL查询时如何按multiply值复制行数据?
在PostgreSQL中按指定次数复制行的实现方法
可以实现,这里提供两种简洁的解决方案:
方法一:改进你已尝试的array_fill+unnest方案
你当前的查询返回的是行类型数据,只需将其拆分为单独的列即可得到目标格式:
SELECT (unnest_row).id, (unnest_row).multiply FROM ( SELECT UNNEST(ARRAY_FILL(t, ARRAY[t.multiply])) AS unnest_row FROM some_table t ) sub;
方法二:使用generate_series(更直观常用)
通过生成对应次数的序列,结合JOIN实现行复制,这是PostgreSQL中处理这类需求的标准写法:
SELECT t.id, t.multiply FROM some_table t JOIN generate_series(1, t.multiply) gs ON true;
执行上述任意语句后,都会得到你期望的结果:
| id | multiply |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
| 3 | 3 |
| 3 | 3 |
| 3 | 3 |
内容的提问来源于stack exchange,提问作者devklick
相关产品推荐
相关产品推荐

