2013-10-18 9 views
0

다른 데이터 세트에없는 하나의 데이터 세트의 레코드를 표시하고 싶습니다. 나는 작은 데이터 세트에없는 첫 번째 (큰) 데이터 세트의 레코드를 찾을 싶습니다테이블에서 레코드 추출

select distinct facil_identifier, facil_addr_line1, 
trim(facil_city) as facil_city, facil_zip 
from xx.tb1 f 
where facil_identifier is not null 

: 여기

더 큰 데이터 세트에 대한 코드입니다. 여기

는 작은 데이터 세트에 대한 코드입니다 :

select distinct facil_identifier, facil_addr_line1, 
facil_zip 
from xx.tb1 f 
where facil_identifier is not null 

이 내 시도 :

select distinct facil_identifier, facil_addr_line1, 
facil_zip 
from xx.tb1 f 
where facil_identifier is not null 
and facil_identifier not in 
(select facil_identifier 
from 
    (select distinct facil_identifier, facil_addr_line1, 
    trim(facil_city) as facil_city, facil_zip 
    from xx.tb1 f2 
    where facil_identifier is not null) as city 
where city.facil_identifier = f.facil_identifier) 
order by facil_addr_line1 

이 코드는 엄청난 비용을 가지고있다. 각 세트에는 3000 개 미만의 레코드가 있습니다.

답변

0

나는 포스트 그레스 SQL에 대한 전문가는 아니지만,

select distinct f2.facil_identifier, f2.facil_addr_line1, 
trim(f2.facil_city) as facil_city, f2.facil_zip 
from import.facil_xx_20131016 f2 
left join import.facil_xx_20131016 f on f2.facil_identifier = f.facil_identifier 
where f2.facil_identifier is not null 
and f.facil_identifier is null 
+0

는 왼쪽이 더 큰 집합의 모든 레코드의 결과에 가입이 그것을해야 (또는 적어도 당신이 가까이). – swhit

+0

@ user1850180 그 이유는 where 절에 "f.facil_identifier is null"이 있기 때문입니다. 큰 세트의 모든 레코드와 함께 작은 세트의 레코드를 결합합니다. where 절의 해당 부분은 더 작은 집합에서 해당 레코드가있는 모든 레코드를 필터링하도록 지시합니다. – Becuzz

+0

전체 집합 또는 0 개의 레코드를 반환합니다. – swhit