我有三个表Tab1
,Tab2
和Tab3
几乎相同的结构(在MS Access中)。但Tab2
和Tab3
列的列数多于Tab1
。
Tab2
和Tab3
结构完全相同。以下是加入密钥
col1
col2
col3
基本上Tab1
条记录应该与Tab2
和Tab3
一致。
如果我需要在Tab2
和Tab3
中与Tab1
进行比较时获取丢失的记录,这可能是有效的方法
感谢您的回复
答案 0 :(得分: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
对于不在所有三个表中的键,它返回每个键值并告诉您它们在哪些表中而不在哪些表中。作为奖励,这也将告诉您是否有任何表有重复的密钥。
答案 1 :(得分:0)
通常你会选择从Tab1 LEFT加入tab2和tab3 LEFT JOINed在一起。这样你就可以从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;