2012-10-01 3 views
1

필드 f1과 f2가있는 테이블 T1과 필드 f3과 f4가있는 테이블 T2가 있습니다.그룹 내 SQL이 아닙니다.

'는의 몇 가지 더미 값을 보자 :

T1: (1,1) (2,3) (3,3) (4,3) (5,1) 
T2: (1,1) (1,2) (3,1) (3,3) 

우리는 같은 일, T1과 T2 사이에 다리를 정의로 F2 및 F3 생각할 수 있습니다. f4 값 2와 관련이없는 모든 f1을 검색하고 싶습니다. 따라서 예상 출력은 1과 5 F1 값 F2 = F3 = 1에서와 같이 T2에서 f4 = 2 인 경우

(2), (3), (4)가됩니다.

어떻게하면됩니까?

편집 2 : I는 T1 긴 프로세스로부터 유도 T2는 F2와 F3이 때문에 인덱스없이

+2

아마도 설명 (오해)이 있지만 설명, 모호한 값 및 기대되는 결과가 일치하지 않습니다. –

+0

정정 됨 ^^ – Pumpkin

+0

네이티브 SQL은 테크노 (SAP 관련), 의사 이름입니까? –

답변

1

를 운용 될 대규모 및 불가능한 반면, 작은 테이블 것으로 예상된다 깜빡하고 똑같은 두 분야 사이에 합류하십시오.

select f1 
from t1 
    left join t2 
     on t1.f2 = t2.f3 
     and t2.f4=2 
where f3 is null  
+0

f3이 null 인 것을 자세히 설명 할 수 있습니까? 원하지 않는 모든 시나리오에 참여하지 않았습니까? – Pumpkin

+0

왼쪽 (외부) 조인이므로 t1의 모든 항목과 일치하고'where .. is null'은 일치하는 항목을 제거합니다. – podiluska

+0

T2 항목 (1,1)이 f1 = 2,3,4 – Pumpkin

0
SELECT DISTINCT F1 
FROM T1 
WHERE (SELECT COUNT(F3) FROM T2 WHERE T1.F2 = T2.F3 AND T2.F4 = 2) = 0 
+1

이 쿼리에 성능 문제가 있습니까? 모든 계산에 대한 대안이 있으며, 필요한 모든 사항이 하나임을 명심하십시오. – Pumpkin

0

LEFT JOIN이 작업에 적합해야합니다. DISTINCT를 사용하여 중복을 피할 수 있습니다.

SELECT DISTINCT f1 
FROM T1 
LEFT JOIN T2 
ON T1.f2 = T2.f3 
WHERE T2.f4 IS NULL OR T2.f4 <> 2