2016-11-28 61 views
1

不幸的是,我的數據庫的數據模型必須改變,所以我正在尋找最無痛的方式來遷移我的數據。是否可以「選擇N次」?

它是如何在這個時刻:

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

是否有可能創建插入到選擇,其中選擇將被稱爲多次reps數未做腳本?

+0

凡reps_Id被存儲在新的模式?你可以遞歸地爲reps創建一個表格,然後在小於每個貨物的期望數量時加入它......所以......「是否可以創建插入到select中,select將被稱爲很多時候作爲代表而不是編寫腳本?「 ***我會這麼認爲。*** – xQbert

回答

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

+0

你不需要派生表。 '從貨物c,generate_series(...)'會做得很好 –

+0

很好用!我從來沒有想過要這樣做。看來我有很多東西要學,非常感謝! – Mithrand1r

相關問題