消除两个表中的常见行 – MS Access

我有两个具有相同结构的表格:

'NCC Code' - Integer 'Vendor' - Short Text 'Profit Center' - Short Text 'Business Franchise' - Short Text 'Business Division' - Short Text 'Spend' - Float 'Savings' - Float 

这些表格包含来自两个不同来源的不同数据集。 有一些在两个相同的行,但大多数是不同的。 所有行的差异并不相同,它不在同一列(例如:有些logging可能与“商业特许经营”有所不同,其他所有列都是相同的,其他的则是“储蓄”,其他则是多列)。

每个表格中都没有唯一的值或密钥,因为它们是从DWH系统生成的。

就软件工具而言,我只能访问MS Access 2013和MS Excel 2013。

我需要find一种方法来识别和提取一个表中的所有行,而这些行在其他表中找不到。 任何人都可以给我一个build议如何做到这一点? 我尝试了各种方法,但无济于事。

谢谢!

使用LEFT JOIN(只显示A和B中的那些,但是可以切换表顺序并将结果合并以得到两者)

 SELECT * FROM A LEFT JOIN B on A.Col1=B.Col1 and A.Col2=B.Col2 and A.Col3=B.Col3 and A.col4=B.Col4... WHERE B.Col1 is null UNION ALL SELECT * FROM B LEFT JOIN A on A.Col1=B.Col1 and A.Col2=B.Col2 and A.Col3=B.Col3 and A.col4=B.Col4... WHERE B.Col1 is null 

使用UNION ALL和AGGREGATE:这将显示来自任何一个表的logging不在另一个(A不在B和B而不在A)联合所有不区分重复(union做一个独特的)然后我们排除logging发生1次以上。 这假定每个表都没有任何重复的开始。 如果他们这样做,我们可以在工会之前把它作为一个独特的表。

然后聚合

 SELECT <All Columns less src), max(src) as SrcTable, cnt(1) FROM (SELECT A.*, 'A' as src FROM A UNION ALL SELECT B.*, 'B' as src FROM B ) C GROUP BY <All Columns less src> HAVING count(1) < 2 

我添加了src,所以我们知道该logging来自哪个表。 最大(src)的作品,因为logging只存在于一个地方。 我们排除这两者。

我做了,我想发布这个,因为可能有其他人遇到同样的问题。 似乎MS Access对于paranthesis非常严格。 如果你想运行一个连接查询,并且其中一个条件包含一个string字段,你应该把所有的条件放在这个paranthesis之间:

 SELECT * FROM A LEFT JOIN B on (A.Col1=B.Col1) and (A.Col2=B.Col2) and (A.Col3=B.Col3) and (A.col4=B.Col4)... WHERE B.Col1 is null UNION ALL SELECT * FROM B LEFT JOIN A on (A.Col1=B.Col1) and (A.Col2=B.Col2) and (A.Col3=B.Col3) and (A.col4=B.Col4)... WHERE B.Col1 is null 

对于我来说,如果我把所有后面的内容都放在一组假设之间,

 SELECT * FROM A LEFT JOIN B (on A.Col1=B.Col1 and A.Col2=B.Col2 and A.Col3=B.Col3 and A.col4=B.Col4...) WHERE B.Col1 is null 

这里有一些额外的信息: https : //social.msdn.microsoft.com/Forums/office/en-US/15c36745-f7a4-4926-9687-7161e5894468/join-expression-not-supported-error-caused-by -unbracketed联接expression-包括串?论坛= accessdev