2011-12-07 38 views
0

嗨我正在查詢兩個文件File1和文件2分別具有字段a,b,c和d,e,f。A和D & B和E是相同類型並且是文件中的鍵。所以我正在運行一個查詢來查找File1中不存在的File1的所有記錄。我運行的基礎上,加入到域a,b和d,e.But一些如何它不工作:關於不在子句中的查詢?

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) 

它也不工作! !請建議我在DB2 AS400

回答

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

你也可以用左這樣做JOIN:

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

我無法理解爲什麼我們使用空還兼具查詢不工作:(...請讓我瞭解了一下 –

+0

我想,除了在表2 –

+0

所有記錄@ abhinavsingh:「不工作」是什麼意思?你有錯誤嗎?沒有錯誤,但沒有結果?第一個查詢中的NULL是任意的。你可以'選擇1'來代替,並得到相同的結果。然而,第二個查詢中的NULL非常重要,因爲它表示LEFT JOIN在file2中找不到匹配的行。 –

0

做一個簡單的連接和應用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