从 postgres 选择数据时是否可以重复行?
例如,给定以下数据:
CREATE TABLE some_table (
id serial not null,
multiply int not null
);
INSERT INTO some_table (multiply)
VALUES (1), (2), (3);
添加到表中的数据如下所示:
ID | 乘 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
选择数据时,我想按列中的数字复制每行multiply
,因此结果如下所示:
ID | 乘 |
---|---|
1 | 1 |
2 | 2 |
2 | 2 |
3 | 3 |
3 | 3 |
3 | 3 |
这可能吗?
我设法得到的最接近的是使用array_fill
with unnest
,它会生成所需数量的重复行,但只返回一列
SELECT UNNEST(ARRAY_FILL(t, ARRAY(t.multiply])) FROM some_table t;
解除嵌套 |
---|
(1,1) |
(2,2) |
(2,2) |
(3,3) |
(3,3) |
(3,3) |
使用设置返回函数
generate_series(1,multiply)
。它生成一系列从1
到 值的数字multiply
,默认步骤为1
:demo以下是关于其工作原理的更多信息:通过将其放置在列表
select
而不是from
部分中,您可以有效地生成 alateral join on true
,因此该函数会针对 中存在的每一行重新计算一次some_table
,并且结果行与该行匹配它们是为.最好记住,由于其本质,如果将 multiply 设置为
0
,它将隐藏该行,因为生成的连接将在某物与无物之间。您可以通过添加以下内容来防止这种情况以及意外的负上限greatest(multiply,1)
: