2012-07-05 4 views
0

5 개의 필드가있는 표가 있습니다. 5 열 중 하나가 PK입니다. 내 reqt 일부 열 (중복되지 않지만 PK) 기반으로 행을 가져올 필요가 및 모든 반환 된 결과에 대한 새 PK 할당하고 저장해야합니다.두 필드를 업데이트하여 레코드를 삽입하는 방법은 무엇입니까?

내 테이블에 10 개의 레코드가있는 경우. 만약 내가 특정 열을 기반으로 10 레코드를 얻을. 나는 모든 10 개의 레코드에 대해 새로운 PK를 asssign하고 저장해야합니다. 마지막으로 테이블에 20 개의 레코드가 있습니다. 이 작업을 수행하는 단일 SQL 쿼리가 있습니까?

감사합니다.

+0

YS를 희망하지만 당신은 UR PK 만드는 논리와 테이블 스키마 – Zia

+2

를 표시해야합니다, 당신 시퀀스를 사용하고 sequence_name으로 PK를 생성 할 수 있습니다 .NEXTVAL –

답변

0

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 
관련 문제