三个表中的记录差异 - MS Access
我有三个表Tab1
,Tab2
和Tab3
与几乎相同的结构(在MS Access中)。但是Tab2
和Tab3
的列数多于Tab1
。三个表中的记录差异 - MS Access
Tab2
和Tab3
结构完全相同。以下是加入键
col1
col2
col3
基本上Tab1
记录应与Tab2
和Tab3
在一起相符。 如果我需要在Tab2
和Tab3
缺少记录时比较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
这将返回每个键值,并告诉您它们在哪些表中并且不在中,哪些键不在所有三个表中。作为奖励,这也会告诉你是否有任何表有重复的键。
通常你会选择从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;
嗨,谢谢您的回复。在解决方案如果我交换标签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
'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
当你交换你周围的表时,会发现记录存在于一个表中,但不在另一个表中。在你的情况下,你只是发现在tab2中存在的记录,但在tab3中丢失了 – cha 2013-02-28 03:40:48
嗨戈登,这并未似乎不支持MS Access – shabar 2013-02-28 05:03:20
@shabar。 。 。所有这些结构都*由MS Access支持。你的错误信息是什么?你使用的是什么版本的Access? – 2013-02-28 14:01:43
嗨,戈登,这是我的坏话。我的脚本语法存在一个问题。但是在这里它并没有检查表格之间的键组合。不是吗。这只是个人的关键价值存在之间的检查表欢呼Shabar – shabar 2013-03-03 22:38:38