簡體   English   中英

使用新ID復制數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM