有可能"选择N次"?

时间:2016-11-28 19:46:54

标签: sql postgresql

不幸的是,我的数据库的数据模型必须改变,所以我正在寻找最简单的方法来迁移我的数据。

目前情况如何:

create table cargo{
  id serial primary key,
  person_id int,
  weight_id float,
  reps_id int
);
//skipping constraints declaration

然而事实上,每个人都能够提升不同的货物价值

我要做的是修改cargo表并添加turn表,如下所示:

create table cargo{
 id serial primary key,
 person_id int,
 );
//skipping constraints declaration

create table turn{
  id serial primary key,
  cargo_id int,
  weight float
);

通常我可以像这样迁移现有数据:

insert into turn (cargo_id, weight) select id, weight from cargo;

但是这样我失去了所有reps reps> 1

是否可以在select中创建insert,其中select将被调用reps count次,而不需要编写脚本?

1 个答案:

答案 0 :(得分:1)

尝试:

-- insert into turn (cargo_id, weight) 
SELECT c.id, c.weight_id
FROM cargo c,
LATERAL (
  SELECT * FROM generate_series(1, greatest( c.reps_id, 1 ) )
) xx;

演示:http://sqlfiddle.com/#!15/4923e/1