다른 테이블에서 테이블을 업데이트하는 방법


28

하나의 테이블 A에 열 (id, field_1, field_2)이 있고 다른 테이블 B에 열 (id, field_2)이 있습니다

이제 테이블 B를 A로 병합하고 싶습니다. 즉, 테이블 A의 field_2를 테이블 B의 값으로 업데이트하고 싶습니다. 어떻게 구현합니까? BTW 저는 오라클을 사용하고 있습니다

감사


두 테이블 모두 동일한 수의 레코드를 포함합니까?
ujjwalesri

답변:


29

공동 관련 하위 쿼리 (Kerri가 제안한)에 대한 다른 방법은 MERGE 문을 사용하는 것입니다. MERGE 문 은 subselect보다 더 효율적일 있습니다 (두 명령문의 실행 계획을 통해서만 확인할 수 있음).

MERGE INTO table_b 
USING 
(
  SELECT id,
         field_2
  FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE 
    SET table_b.field_2 = ta.field_2

2
MERGE명령문에 대한 유일한 제한 사항은 명령문이 결합 된 컬럼을 갱신 할 수 없다는 것입니다. 즉, ON절 에서 사용 된 컬럼을 갱신 할 수 없습니다 .
Lalit Kumar B

이것은 나를 위해 일했고, 250 만 행을 업데이트 ORA-01555: snapshot too old
했지만 오류가 발생

15

아니 정확히 당신이이 일에 후,하지만이 예약 된 작업을 통해 일회성, 또는 연속으로 작동해야하는지 :

UPDATE table_a a
   SET field_2 = ( SELECT field_2
                     FROM table_b b
                    WHERE b.id = a.id )
;

이제 위를 실행할 때마다 테이블의 모든 행에 걸쳐 수행됩니다. 이것이 항상 당신이해야 할 일이라면 다른 것을 제안 할 것이지만 일회성 또는 매우 작은 테이블이면 충분합니다.


2

user2의 다른 테이블에서 user1의 한 테이블을 사용 하여이 작업을 성공적으로 수행했습니다.

update user1.table1 a
set a.field1 = (
  select b.field1
  from user2.table2 b
  where a.field1=b.field1
)
where <condition for update user1.table1>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.