2009-12-29 5 views
0

두 테이블 A & B가 있는데 다음과 같은 쿼리를 갖고 싶습니다. 두 테이블이 동일한 경우 TRUE 만 반환합니다. A의 모든 라인이 B &에 있음을 의미합니다. 그 반대의 경우도 마찬가지 상관없이 선 순서)두 테이블 간의 동일성에 대한 PostgreSQL 쿼리

나는 제외 키워드를 사용할 수 있지만 그것은 당신의 도움을 많은 경우에

감사 작업을 나던.

+0

당신이 무엇을 시도했다 게시하시기 바랍니다 : 모두 카운트가 0 경우

테이블은 동일하고도 카운트가 0보다 작을 수 있기 때문에 개수의 합이 0이면, 우리는 테스트 할 수 있습니다 테이블 A와 B의 열 목록과 함께. –

+0

데이터 세트의 크기는 얼마나됩니까? EXCEPT로 어떤 문제가 발생합니까? –

+0

데이터 집합이 매우 작고 (20 행 미만) 쿼리는 프로덕션 환경이 아닌 디버그 용으로 만 사용됩니다. – adam

답변

6
select * from tablea except all select * from tableb 

은 tableb에없는 모든 행을 tablea에서 반환합니다.

것은 그것을 TABLEA에 존재하지 않는 다른 방법 TableB의에서 주위

select * from tableb except all select * from tablea 

반환 모든 행을하고.

그래서, 지금 우리는 할 수 있습니다

select count(*) from (select * from tablea except all select * from tableb) x; 

는 TABLEA에서 "나쁜"행 번호를, 및하기 :

select count(*) from (select * from tableb except all select * from tablea) x; 

이 TableB의에서 "나쁜"행의 수를 얻을 수 있습니다. ,

select 0 = (select count(*) from (select * from tablea except all select * from tableb) x) + (select count(*) from (select * from tableb except all select * from tablea) x); 
+0

감사합니다 !! + 연산자의 위치를 ​​제외하고는 정상적으로 작동합니다. – adam

+1

문제가 해결되면 대답을 수락해야합니다. –