2011-12-07 37 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