我尝试使用以下查询在两个表中找到不匹配的记录(两者中包含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分钟才能获得结果。任何其他解决方案都有不匹配的记录查询?
答案 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 ;