SQL查询使用NOT IN查找2列的不同行

时间:2012-05-31 02:01:14

标签: sql

我非常非常地请求你的帮助。请帮帮我。

我有两张桌子,如下所示:

first_table

field1  field2  field3  field4    
======  ======  ======  ======    
A       B       C       D    
A       B       C       D    
A       A       C       B   
A       A       C       B

second_table

field1  field2  field3  field4    
======  ======  ======  ======       
A       B       C       D    
A       B       C       D    
A       A       C       B   
A       A       C       B

我需要准备一个sql查询,如下所示:

  • first_table获取second_table中不存在的记录。
  • 此外,查询基于来自2列的不同记录的组合,如field1和field2。

例如:

select first_table.field1, first_table.field2,
       first_table.field3, first_table.field4
from
first_table
where
distinct (first_table.field1 NOT IN second_table.field1 AND first_table.field2 
    NOT IN second_table.field2)

但上述查询不起作用。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

这是你的意思吗?

select first_table.field1, first_table.field2,
       first_table.field3, first_table.field4
from first_table
where not exists (
    select 1 from second_table
    where second_table.field1 = first_table.field1
    and second_table.field2 = first_table.field2
)

这假定字段不允许为空。如果需要,易于处理null,但执行此操作的首选方法因数据库而异。

答案 1 :(得分:0)

此查询将在first_table中查找second_table中没有相应记录的记录。尝试此操作后,请指明您需要什么,以便我们为您提供帮助。

select t1.field1, t1.field2, t1.field3, t1.field4 from first_table as t1
left outer join second_table as t2 on t1.field1 = t2.field1 and t1.field2 = t2.field2
where t2.field1 is null and t2.field2 is null

答案 2 :(得分:0)

你的问题不明确,但我向你们提出两个问题,我们认为其中一个会非常符合你们的要求。

1。

select first_table.field1,first_table.field2,first_table.field3,first_table.field4
     from      first_table
     join second_table
     on first_table.field1 not like second_table.field1 and first_table.field2 not like second_table.field2;

2

select first_table.field1,first_table.field2,first_table.field3,first_table.field4 from first_table
 join second_table
 on (first_table.field1  like second_table.field1 and first_table.field2 like          second_table.field2)
   group by first_table.field1,first_table.field2,first_table.field3,first_table.field;

我认为其中一个会帮助你。