[英]Copy data with new IDs
有什么方法可以使用新ID將某些行復制到同一表中?
我的桌子是這樣的:
ID | data
1 | SOMETHING
2 | SOMETHING
3 | SOMETHING
我有舊編號: '{1,513,3,4,5}'
,新的問題: '{1338,7,512,9,10}'
,我需要的數據與來自行1,7 <= 513等添加行1338就像old[0] = new[0]
。
目前,我正在使用循環:
SELECT old_ids INTO oIds FROM vars_table WHERE sid = id;
FOR i IN 0..array_length(new_ids, 1) LOOP
INSERT INTO ids(ID, data)
SELECT new_ids[i], data
FROM ids
WHERE id = oIds[i]
AND NOT EXISTS(SELECT 1 FROM ids WHERE id = new_ids[i]);
END LOOP;
有更好的方法嗎? 也許在1查詢?
不需要循環:
insert into the_table (id, data)
select id + 5, data
from the_table;
但是,以上要求您知道表中有多少行。 要考慮當前的行數,您可以執行以下操作:
insert into the_table (id, data)
select id + (select max(id) from the_table), data
from the_table;
處理這種數據重復的最佳方法是將ID
列定義為serial
並讓Postgres處理創建新值:
create table the_table (id serial not null, data text);
然后將像這樣插入初始數據:
insert into the_table (data)
values ('foo'), ('bar'), ('foobar');
這樣,復制數據就很容易了:
insert into the_table (data)
select data
from the_data;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.