有没有办法使用新ID将某些行复制到同一个表中? 我的桌子是这样的:
ID | data
1 | SOMETHING
2 | SOMETHING
3 | SOMETHING
我有旧ID:'{1,513,3,4,5}'
和新ID:'{1338,7,512,9,10}'
我需要添加行1338,其中包含来自行1,7的数据< = 513等。与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个查询中?
答案 0 :(得分:0)
不需要循环:
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;