2014-01-08 3 views
-1

구조가 동일한 두 개의 테이블이 있으며 키, 타임 스탬프, 값 및 외래 키가 있습니다.Postgres의 두 테이블 비교

동일한 타임 스탬프, 값 및 외래 키가있는 첫 번째 일치하는 레코드가없는 두 번째 테이블의 모든 레코드를 나열하고 싶습니다.

어떻게하면됩니까? 당신이 시도 할 수

+0

답변은 ** 정확한 테이블 정의 **에 따라 달라지며, 이러한 질문에는 반드시 포함해야합니다. 'psql'에서'\ d tbl '을 사용하십시오. 가능한 NULL 값을 고려해야합니다. 또한 귀하의 Postgres 버전을 참조하십시오. –

답변

0

두 가지 방법, 최초의 "존재"를 사용 :

select a.key, 
     a.ts, 
     a.value 
from a 
where not exists (select 1 
        from b 
        where a.key = b.key 
        and (a.ts != b.ts 
         or a.value != b.value 
         or a.fk != b.fk)) 
; 

그리고 "에서"사용 :

select a.key, 
     a.ts, 
     a.value 
from a 
where (a.key, a.ts, a.value) not in (select b.key, b.ts, b.value from b) 
; 

편집 : 나는 당신이 네 개의 열을 가지고 가능성 매칭 있습니다했습니다 실현 열쇠에. 이를 반영하기 위해 "exists"쿼리를 수정했습니다. 이제 해당 쿼리는 테이블 간의 키가 일치하는지 확인한 다음 다른 세 열 중 하나가 다른지 확인합니다.