2016-09-14 3 views
0

다른 테이블 (B)이있는 ID가 일치하면 테이블의 모든 행을 업데이트하려고합니다.Oracle SQL Developer에서 PL/SQL의 여러 행을 업데이트 할 때 중복을 무시합니다.

소스 테이블의 행 안정적인 세트를 얻을 수 없습니다

내 연구를했습니다 나는 원인이 행을 복제 할 수 있다는 것을 알고 문제는 내가 다음과 같은 오류를 얻고 있다는 것입니다 테이블 중 하나에. 테이블 B에만 중복 된 행이 있습니다. 일부 쿼리에서 무시할 수있는 방법을 시도했지만 성공하지 못했습니다.

merge into A x 
    using B y 
    on (x.id= y.id) 
    when matched then 
     UPDATE SET 
     x.apples= y.apples, 
     x.bananas= y.bananas, 
     x.grapes= y.grapes; 

누군가 도움을 줄 수 있습니까?

미리 감사드립니다.

+0

질문에는 PL/SQL이 없습니다 : –

답변

0

나는 여기에 내가 만든 솔루션입니다,이 문제를 해결 할 수 있었다.
0

업데이트를 수행하는쪽에 중복이있을 수 있습니다. 하지만 소스 측에서 복제본을 가질 수는 없습니다.
SQL 엔진이 업데이트에 사용할 여러 레코드를 알지 못한다고 생각하십시오. 중복 된 문제를 해결해야합니다. 또는 업데이트에 사용할 고유 한 데이터 세트를 얻으려면 max 또는 min을 수행하십시오.

merge into A x 
     using (select distinct id from B) y 
     on (x.id= y.id) 
     when matched then 
      UPDATE SET 
      x.apples= (select apples from B where id = 
(select distinct id from B where id = x.id) and rownum = '1'), 
      x.bananas= (select bananas from B where id = 
(select distinct id from B where id = x.id) and rownum = '1'), 
      x.grapes= (select grapes from B where id = 
(select distinct id from B where id = x.id) and rownum = '1');