2017-04-14 1 views
0

rownum을 사용하여 관련없는 테이블의 값으로 열을 업데이트하려면 oracle sql을 작성해야합니다.rownum을 기반으로 한 Oracle 업데이트

나는 그것이 작동 얻을 수 없습니다

UPDATE table_1 A 
SET A.id = (SELECT B.id FROM table_2 B 
     WHERE A.rownum = B.rownum) 

감사합니다.

열 ID의 값을 다른 테이블에 삽입하면됩니다. 조인에 사용할 수있는 열이 없습니다. 이것이 가능합니까?

+3

편집 질문 및 샘플 데이터와 원하는 결과를 제공합니다. 'rownum'은 실제 칼럼이 아닌 가짜 칼럼이므로 여러분이 생각해야 할 방식대로 행동하지 않습니다. –

+1

왜 데이터를 관련시키는 다른 방법이 없습니까? 그것은 관계형 데이터베이스를 사용하는 좋은 방법이 아닌 것 같습니다 ... – SandPiper

+0

SandPiper에 동의합니다. 관계형 데이터베이스의 행은 ** 정렬되어 있지 않습니다 **. "임의"값을 기반으로 두 테이블을 결합하는 것은 의미가 없습니다. –

답변

1

UPDATE 대신 MERGE 문을 사용하십시오.
아래의 간단한 예를 찾으십시오.


테스트 데이터 제 (table_2id 열가 null)

:

create table table_2 as 
SELECT LEVEL as id, chr(64+level) as name 
from dual connect by level <= 5; 

create table table_1 as select * from table_2; 
update table_2 set id = null; 
commit; 

SELECT * FROM table_1; 
     ID NAME 
---------- ---- 
     1 A 
     2 B 
     3 C 
     4 D 
     5 E 



SELECT * FROM table_2; 
     ID NAME 
---------- ---- 
      A 
      B 
      C 
      D 
      E 

이것은 그들의 rownumns 내놓고 번째로 한 테이블 id 값을 복사 명령을 병합 인

MERGE INTO table_2 t2 
USING (
     SELECT * 
     FROM (
       select t.*, rownum as rn 
       from table_1 t 
     ) t1 
     JOIN (
       select rownum as rn, rowid as rid 
       from table_2 t 
     ) t2 
     ON t1.rn = t2.rn 
) d 
ON (t2.rowid = d.rid) 
WHEN MATCHED THEN UPDATE SET t2.id = d.id; 

01 23,516,

및 병합 후 결과는 다음과 같습니다

SELECT * FROM table_2; 
     ID NAME 
---------- ---- 
     1 A 
     2 B 
     3 C 
     4 D 
     5 E 
+0

고마워. 그것은 작동합니다. – Steve

관련 문제