三个表中的记录差异 - MS Access

问题描述:

我有三个表Tab1,Tab2Tab3与几乎相同的结构(在MS Access中)。但是Tab2Tab3的列数多于Tab1三个表中的记录差异 - MS Access

Tab2Tab3结构完全相同。以下是加入键

col1 
col2 
col3 

基本上Tab1记录应与Tab2Tab3在一起相符。 如果我需要在Tab2Tab3缺少记录时比较Tab1可能是什么有效的方式

感谢您回应

如果你只关心键,这里是一个好办法:

select col1, sum(isTab1) as numTab1, sum(isTab2) as numTab2, sum(isTab3) as numTab3 
from ((select col1 as col, 1 as isTab1, 0 as isTab2, 0 as isTab3 from tab1 
    ) union all 
     (select col2, 0 as isTab1, 1 as isTab2, 0 as isTab3 from tab2 
    ) union all 
     (select col3, 0 as isTab1, 0 as isTab2, 1 as isTab3 from tab3 
    ) 
    ) t 
group by col 
having sum(isTab1)*sum(isTab2)*sum(isTab3) <> 1 

这将返回每个键值,并告诉您它们在哪些表中并且不在中,哪些键不在所有三个表中。作为奖励,这也会告诉你是否有任何表有重复的键。

+0

嗨戈登,这并未似乎不支持MS Access – shabar 2013-02-28 05:03:20

+0

@shabar。 。 。所有这些结构都*由MS Access支持。你的错误信息是什么?你使用的是什么版本的Access? – 2013-02-28 14:01:43

+0

嗨,戈登,这是我的坏话。我的脚本语法存在一个问题。但是在这里它并没有检查表格之间的键组合。不是吗。这只是个人的关键价值存在之间的检查表欢呼Shabar – shabar 2013-03-03 22:38:38

通常你会选择从tab1左加入tab2和tab3左加入到一起。这样你将得到tab1的所有记录。当tab2和tab3中有一些缺失记录时,将会出现空值。您可以在WHERE子句中检查空

因此,查询将类似于这样一个(请注意括号 - 这是为MS-访问的要求):

SELECT * FROM 
tab1 LEFT JOIN (tab2 LEFT JOIN tab3 ON tab2.col1 = tab3.col1 AND tab2.col2 = tab3.col2) 
ON tab1.col1 = tab2.col1 AND tab1.col2 = tab2.col2 
WHERE tab2.col1 Is Null; 
+0

嗨,谢谢您的回复。在解决方案如果我交换标签2和标签2如下,我得到不同数量的记录。基本上Tab2有比Tab3更多的记录数 这怎么可能发生。 SELECT * FROM TAB1 LEFT JOIN(TAB3 LEFT JOIN TAB2 ON tab2.col1 = tab3.col1 AND tab2.col2 = tab3.col2) ON tab1.col1 = tab3.col1 AND tab1.col2 = tab3.col2 WHERE TAB3。 col1是空的; – shabar 2013-02-28 03:26:24

+0

'SELECT * FROM tab1 LEFT JOIN(tab3 LEFT JOIN tab2 ON tab2.col1 = tab3.col1 AND tab2.col2 = tab3.col2)ON tab1.col1 = tab3.col1 AND tab1.col2 = tab3.col2 WHERE tab3.col1一片空白; ' – shabar 2013-02-28 03:34:25

+0

当你交换你周围的表时,会发现记录存在于一个表中,但不在另一个表中。在你的情况下,你只是发现在tab2中存在的记录,但在tab3中丢失了 – cha 2013-02-28 03:40:48