【问题标题】:Find unmatched records from 2 tables using Access sql使用 Access sql 从 2 个表中查找不匹配的记录
【发布时间】:2014-11-19 05:05:58
【问题描述】:

我正在尝试使用以下查询(查询是从访问查询向导构建的)在两个表中查找不匹配的记录(两个表中都包含超过 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 分钟才能得到结果。对于不匹配的记录查询,还有其他解决方案吗?

【问题讨论】:

  • 100 多条记录,你的意思是几百条吗?来自链接帖子的查询需要 15 分钟?你能把访问文件贴在某个地方吗,我很好奇:)

标签: sql ms-access-2010


【解决方案1】:

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

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

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

  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  ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2022-07-29
    相关资源
    最近更新 更多