2011-12-07 2 views
0

안녕하세요 저는 File1과 File2의 두 파일에 대해 쿼리를 실행하고 있습니다. 각각 a, b, c, d, e, f를가집니다. A와 D & B와 E는 같은 유형이며 파일의 키입니다. 그래서 File2에없는 File1의 모든 레코드를 찾기 위해 쿼리를 실행하고 있습니다.not in 절에 관한 질의?

select * from file1 where a,b not in ((select a,b from file1 x,file2 y where y.a=x.d 
and y.b=x.e) z) 

그런 다음 절에없는 정확하지 말한다 내가 시도 :

select * from file1 where not exists (select a,b from file1 x,file2 y where y.a=x.d 
    and y.b=x.e) 

나는이, B와 D 분야에 기초 참여 실행하고, 어떻게 작동하지의 일부를 e.But 그것은 또한 작동하지 않습니다 !!! ! 제안 제발 내가 DB2의 AS400 오전 당신은 또한 LEFT이 할 수

답변

1
SELECT * 
    FROM file1 f1 
    WHERE NOT EXISTS(SELECT NULL 
         FROM file2 f2 
         WHERE f1.a = f2.d 
          AND f1.b = f2.e) 

는 가입 :

SELECT f1.* 
    FROM file1 f1 
     LEFT JOIN file2 f2 
      ON f1.a = f2.d 
       AND f1.b = f2.e 
    WHERE f2.d IS NULL 
+0

나는 우리는 또한 쿼리가 모두 작동하지 않습니다 널 (null)을 사용하는 이유를 이해 할 수없는입니다 : (... 제가 표 2 –

+0

을 이해하시기 바랍니다 @ abhinavsingh : "일하지 않는다"는 것은 무엇을 의미합니까? 오류가 있습니까? 오류가 없지만 결과가 없습니까? 첫 번째 쿼리의 NULL은 임의적입니다. 대신에 'SELECT 1'을 선택하여 동일한 결과를 얻을 수 있습니다. 그러나 LEFT JOIN이 file2에서 일치하는 행을 찾지 못했음을 나타 내기 때문에 두 번째 쿼리의 NULL이 중요합니다. –

+0

에있는 것을 제외하고 모든 레코드를 원하는 비트 –

0

간단한 가입과 적용 DO WHERE 절 어디에 두 번째 테이블에서 NULL ...

select 
     F1.a, 
     F1.b, 
     F1.c 
    from 
     File1 F1 
     left join File2 F2 
      on F1.a = F2.d 
      and F1.b = F2.e 
    where 
     F2.d is null