2014-09-30 116 views
0

我有两个数据源。一个本地副本,一个副本上传到服务器。我想检查没有数据被损坏,所以我下载了服务器复制并卡在MS Access中。Union All - Union None?仅查找非重复项?

这两个表显示为具有1200000行,这是一个好的开始,但是那些行中的实际数据如何。我决定一个工会会解决问题。如果两个表都是相同的,那么应该没有重复,因此联合也只有1200000行。

SELECT tbl1.* FROM [local table] tbl1 
UNION 
SELECT tbl2.* FROM [server table] tbl2; 

不幸的是,这返回1203005行,这表明有3005行在两个表中都不相同。现在,UNION ALL将返回所有行,而不管是否重复,在本例中为2400000行。

是否有UNION NONE这将只返回两个表中不同的条目?

亲切的问候,

+0

你有行的唯一键吗? – Arion 2014-09-30 09:19:25

回答

0
SELECT [all important fields here, maybe all] FROM 
    (
    SELECT ... 
    UNION 
    SELECT ... 
    ) AS temp 
GROUP BY [all important fields here, maybe all] HAVING COUNT(*) = 1 

还是做了充分的JOIN像下面

SELECT * 
FROM tbl1 AS t1 
FULL JOIN tbl2 AS t2 ON t1.firstColumn = t2.firstColumn AND t2.second ... 
WHERE t1.firstColumn IS NULL OR t2.firstColumn IS NULL 

但是后来答案不会是你想要什么,因为你会得到所有列,无论是从TBL1和tbl2

+0

访问不支持全加入! – PaulFrancis 2014-09-30 09:47:09

+0

没有意识到,但是你可以模拟一个“完整的外部连接”与你结合在一起的三个查询。 http://www.databasejournal.com/features/msaccess/article.php/3516561/Implementing-the-Equivalent-of-a-FULL-OUTER-JOIN-in-Microsoft-Access.htm – Sasse 2014-09-30 09:56:16

+0

当然,你可以“模拟“FULL Outer join @Sasse。然而,考虑到数据集,我会想象这将是对子查询低效的过程。这是我答案中文章的亮点。 – PaulFrancis 2014-09-30 09:59:43