消除两个表中的公共行 - MS Access

时间:2017-04-07 13:48:09

标签: sql excel ms-access duplicates

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

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

这些表包含来自两个不同来源的不同数据集。有些行在两者中都是相同的,但大多数都是不同的。所有行的差异并不相同,它们不在同一列中(例如:某些记录可能因“商业特许经营”而异,所有其他列都相同,其他列则为#39 ;储蓄'和其他人不止一列。)

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

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

我需要找到一种方法来识别和提取一个表中的所有行,这些行在另一个表中找不到。谁能给我一个如何做的建议呢?我尝试了各种方法,但无济于事。

谢谢!

2 个答案:

答案 0 :(得分:1)

使用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:这将显示来自任何一个表而不是另一个表中的记录(A不在B中而B在B中不在A中)所有联合都没有区分出重复项(union不同)然后排除出现多于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,因此我们知道记录来自哪个表。 max(src)起作用,因为记录只存在于一个地方。我们将两者排除在外。

答案 1 :(得分:1)

我做了,我想发布这个,因为可能有其他人遇到同样的问题。似乎MS Access对于paranthesis非常严格。如果要运行连接查询并且其中一个条件包含字符串字段,则应将所有条件置于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-join-expression-comprising-string?forum=accessdev