2017-04-21 2 views
0

잘 업데이트 할 수 있지만 잘 삭제할 수 있지만 한 번에 모두 수행하려고합니다.업데이트 행이 어디에 없는지

나는

다음이

ref,fname,lname,add1,add2 

A1 b c d e 
B3 k g h t 

같은 다른 테이블의 데이터가 난을 업데이트 할 첫 번째 열이 고유 경우, 열 이름은

ref,fname,lname,add1,add2,add3,add4 

A1 a b c d h j 
S2 f d s e y t 
B3 j f s e o p 

있는이 같은 테이블 ORIG이 첫 번째 테이블에서 두 번째 테이블을 사용하고 고유하지 않은 행을 삭제하십시오.

최종 결과는 아래와 같은 ORIG 테이블이어야합니다

A1 b c d e h j 
B3 k g h t o p 

이 작업을 한 번에 수행 할 수 있습니까?

답변

2

내가이 사용 열팽창 계수에 접근 할 수 있습니다

with u as (
     update orig 
      set b = d.b, . . . 
      from data d 
      where d.a = orig.a 
     returning * 
    ) 
delete from orig 
    where not exists (select 1 from u where u.a = d.a); 

첫 번째 CTE는 행을 업데이트합니다. 두 번째는 삭제를 수행합니다.

+0

'존재하지 않음 (선택 u에서 ua = da's 대 u'uu에서 선택')을 선택하면 어떤 이점이 있습니까? –

+0

구문 오류가 발생합니다. 오류 : "에서"또는 근처에서 구문 오류가 발생했습니다 LINE 8 : 원천에서 삭제 ^ – Kilisi

+1

@Kilisi : 답변에 오타가 있습니다 .CTE –

0

당신은 이것에 대한 상관 하위 쿼리를 사용할 수 있습니다

delete 
from orig o 
where not exists (
     select 1 
     from data d 
     where d.col1 = o.col1 
     ) 
+0

그러나 키가 일치하면 작동이 업데이트되어야합니다. –