2016-11-04 5 views
-1

두 개의 포스트그레스 테이블 사이에 델타를 찾고 싶습니다. 테이블 A와 테이블 B가 있다고 가정 해 봅시다. 테이블 A에 새로 추가 된 레코드를 찾고 싶습니다. 그런 다음 테이블 A에서 업데이트 된 레코드를 찾은 다음 테이블 B에 대해 테이블 ​​A에서 삭제 된 레코드를 찾아야합니다.Postgres DB에서 두 테이블 간의 변경/델타

나중에 업데이트/삭제/삽입 플래그를 기반으로 처리해야하므로 최선의 방법이 될 것입니다. 당신은 완전 외부 작업을 수행 할 수 있습니다

+0

이러한 테이블에는 공통된 고유 한 열이 있습니까? –

+0

예 두 테이블이 동일합니다. – AB90

답변

0

가입 :

select id, 
     case 
     when s.id is null then 'Deleted in source table' 
     when t.id is null then 'Added in source table' 
     else 'Data Changed' 
     end as status 
from source s 
    full outer join target t using (id) 
where s is distinct from t; 

이 두 테이블의 고유 열이 id라는 것으로 가정합니다.

where s is distinct from t은 두 테이블의 모든 열을 비교하므로 둘 다 존재하고 동일한 모든 행을 필터링합니다. 결과는 표 중 하나에서 누락되었거나 다른 값을 갖는 행입니다.

온라인 예 : http://rextester.com/LKY13449

+0

새로 추가 된 행과 업데이트 된 행 또는 테이블 A에서 삭제 된 행을 확인하는 플래그도 필요합니다. – AB90

+0

@AbhijeetSahai : 이는'status' 열입니다. 나는 당신의 말을 사용하는 예를 바꾼다. –

+0

응답에 감사드립니다. 그것은 효과가있다. 내 테이블에서 모든 필드가 동일하며이 쿼리를 실행하면 결과 집합에 중복 열이 나타납니다. 그것들을 제거하고 테이블 A와 같은 컬럼 구조를 얻는 방법은 두 테이블 모두 동일합니다. 나는 테이블 B 데이터에 대해 신경 쓰지 않는다. 테이블 A 데이터 만 가져오고 싶습니다. – AB90