使用Access sql从2个表中查找不匹配的记录

时间:2014-11-18 20:39:27

标签: sql ms-access-2010

我尝试使用以下查询在两个表中找到不匹配的记录(两者中包含100多条记录)(查询是从访问查询向导构建的)

表A

    EC ID   wt
     1001   339.55
     1007   3.77
     1008   1.76
     1009   13.48
     1010   5.86
     1011   11.58
     1012   37.89
     1013      4.88
     1015      6.98

表B

     EC ID  wt_xxxx
     1001   339.55
     1002      1.99
     1003      1.78
     1004       2
     1007   3.77
     1008   1.76
     1009   13.48
     1010   5.86
     1011   11.58
     1012   37.89

Query1重新计算表A中的所有记录,这些记录不在表B中。

  SELECT A.[EC ID], A.wt 
  FROM A LEFT JOIN B ON A.[EC ID] = B.[EC ID]
   WHERE (((B.[EC ID]) Is Null));

返回

   EC ID    wt
   1013      4.88
   1015      6.98

类似地,Query2重新计算表B中不在表A中的所有记录。

  SELECT B.[EC ID], B.wt_xxxx
  FROM B LEFT JOIN A ON B.[EC ID] =A.[EC ID]
  WHERE (((A.[EC ID]) Is Null));

返回

    EC ID    wt_xxxx
     1002      1.99
     1003      1.78
     1004       2

运行第二个查询时,访问权限自行关闭。但有时它会给出结果。无法理解为什么。有没有有效的方法来做到这一点。我在stackoverflow中使用了一个查询          Finding unmatched records with SQL表现非常差,需要15分钟才能获得结果。任何其他解决方案都有不匹配的记录查询?

1 个答案:

答案 0 :(得分:0)

如果记录只在表格中出现一次

select count(*),EC ID,wt_xxxx
from (select B.[EC ID], B.wt_xxxx
      TABLEB B
      union all
      select A.[EC ID], A.wt_xxxx
      TABLEB A) q
group by EC ID,wt_xxxx
having count(*) =1

OR 用你所拥有的。你很接近,只需使用完整的外连接来查找任何一个表中的空值

  SELECT B.[EC ID], B.wt_xxxx, A.[EC ID], A.wt_xxxx, 
  FROM B FULL OUTER JOIN A ON B.[EC ID] =A.[EC ID]
  WHERE A.[EC ID] Is Null or B.[EC ID] Is Null  ;