0

我有三个表Tab1Tab2并且Tab3具有几乎相同的结构(在 MS Access 中)。但是比. Tab2_Tab3Tab1

Tab2并且Tab3是完全相同的结构。以下是加入键

col1
col2
col3

基本上Tab1记录应该Tab2Tab3在一起。如果我需要获取丢失的记录Tab2以及Tab3何时比较Tab1可能是有效的方法

感谢您的回复

4

2 回答 2

0

如果您只关心键,这是一个好方法:

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

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

于 2013-02-28T00:11:41.257 回答
0

通常你会 SELECT FROM tab1 LEFT JOINing tab2 和 tab3 LEFT JOINed 一起。这样,您将从 tab1 获取所有记录。当 tab2 和 tab3 有一些缺失的记录时,会有空值。您可以在 WHERE 子句中检查空值

因此,查询看起来与此类似(请注意括号 - 这是 ms-access 的要求):

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;
于 2013-02-28T00:14:49.783 回答