UPDATE 대신 MERGE 문을 사용하십시오.
아래의 간단한 예를 찾으십시오.
테스트 데이터 제 (table_2
에 id
열가 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
편집 질문 및 샘플 데이터와 원하는 결과를 제공합니다. 'rownum'은 실제 칼럼이 아닌 가짜 칼럼이므로 여러분이 생각해야 할 방식대로 행동하지 않습니다. –
왜 데이터를 관련시키는 다른 방법이 없습니까? 그것은 관계형 데이터베이스를 사용하는 좋은 방법이 아닌 것 같습니다 ... – SandPiper
SandPiper에 동의합니다. 관계형 데이터베이스의 행은 ** 정렬되어 있지 않습니다 **. "임의"값을 기반으로 두 테이블을 결합하는 것은 의미가 없습니다. –