我有三个表Tab1
,Tab2
并且Tab3
具有几乎相同的结构(在 MS Access 中)。但是比. Tab2
_Tab3
Tab1
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
这将返回每个键值,并告诉您它们在哪些表中和不在三个表中的键。作为奖励,这还将告诉您是否有任何表具有重复键。
通常你会 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;