2012-07-05 97 views
0

我有一個表有5個字段。 5列之一是PK。我的需求是我需要基於某些列(非重複但不是PK)獲得行,對於所有返回的結果,我需要分配新的PK並保存。如何通過更新兩個字段來插入記錄?

如果我在我的表中有10條記錄。如果我根據某一列獲得10條記錄。我需要爲所有10條記錄分配新的PK並保存。最後在表中會有20條記錄。有沒有執行此操作的任何單個SQL查詢?

謝謝!

+0

YS是可以的,但是你需要證明UR PK決策邏輯和表模式 – Zia 2012-07-05 10:43:01

+2

如果確定有沒有衝突,你可以使用序列並使用sequence_name.NEXTVAL生成一個PK – 2012-07-05 10:46:01

回答

0

IF COL1是PK(自動增量列)

insert into table (col1, col2, col3, col4, col5) 
    select null, col2, col3, col4, col5 
    from table 
    where col2 = 'anyvalue' and more conditions... ; 
0

我不知道如果我理解正確的話,你但這樣做你需要什麼?

由於您沒有給出太多細節,因此您必須填寫空格!

INSERT INTO <table> (
    pk_col, 
    col2, 
    col3, 
    col4, 
    col5 
) 
    SELECT <new_pk>, 
      col2, 
      col3, 
      col4, 
      col5 
    FROM <table> 
    WHERE <your search criteria>; 

希望它可以幫助...

1
-- create a sequence to manage the primary keys 
create sequence key_sequence; 

-- i don't know what data you want in your table 
create table tempTable (
myKey int primary key, 
myValue varchar(12)) 

-- create four rows of arbitrary data, they will get primary keys of 1,2,3 and 4 
insert into tempTable values (key_sequence.nextval, 'eggs') 
insert into tempTable values (key_sequence.nextval, 'bacon') 
insert into tempTable values (key_sequence.nextval, 'chips') 
insert into tempTable values (key_sequence.nextval, 'salad') 

-- you can see the 4 rows 
select * from tempTable 

-- select all four rows (as no where clause) and re-insert them into the table 
-- the sequence will take care of allocating new primary keys 
insert into tempTable 
select key_sequence.nextval, myValue 
from tempTable 

-- now you can see eight rows in the table 
select * from tempTable 
相關問題