2016-12-03 2 views
-4

2 개의 테이블이 있으며 같은 행을 반입하지 ​​않습니다. 검색어 작성 방법SQL 쿼리에서 같지 않은 행을 얻는 방법

예를 들어 table a은 10 개의 행을 포함하고 table b은 10 개의 행을 포함합니다. a와 b의 평등 행은 내가

어떻게 나 테이블도 동일하지 않은 테이블 값을 가져 (안 B 테이블)이 동일하지 않은 행을 먹고 싶어 5.

입니까?

결과

구가 교차 유사하지만 5 레코드

+0

빼기는 정답입니다. 그 두 테이블에 동등하지 않은 값을줍니다. 난 단지 테이블 값을 원합니다 – user2587029

답변

2

는 B의 행을 가지고 있지만하려면

select * from A minus select * from B 

는 모두 A의 행과 B 아니지만을 촬영하려면 :

(select * from A union select * from B) minus (select * from A intersect select * from B) 
+0

빼기가 정답을 제시하지 않습니다. 그 두 테이블에 동등하지 않은 값을줍니다. 테이블 값만 원한다. – user2587029

1

이 문제는 오래 전에 해결되었습니다. 최적의 솔루션은 각 테이블을 한 번만 읽습니다 (각 테이블을 두 번 읽고 몇 가지 추가 작업을 수행하는 "대칭 차이"솔루션과 달리).

select 'A' as source, col1, col2, ... 
from table_A 
union all 
select 'B' as source, col1, col2, ... 
from table_B 
group by col1, col2, ... 
having count(*) = 1 
; 

행이 두 테이블에있는 경우

, 그 수는이 중 하나를 테이블에 중복 행이없는 가정 2.

될 것입니다; 행이 중복 될 수있는 경우 HAVING 조건을 수정할 수 있습니다. 예 :

having count(case when source = 'A' then 1 end) = 0 
    or count(case when source = 'B' then 1 end) = 0 
관련 문제