2017-04-07 44 views
1

我有具有相同的結構的兩個表:從兩個表中消除共同行 - MS訪問

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

這些表包含不同的數據集,從兩個不同的來源的。兩行中有一些行相同,但大多數不同。所有行的差別並不相同,它不在同一列(例如:某些記錄可能因'Business Franchise'而異,其他所有列都相同,其他部分由'Savings'和其他b由多列組成)。

每個表中沒有唯一值或密鑰,因爲它們是從DWH系統生成的。

至於軟件工具去我只有到MS Access 2013和MS Excel 2013年訪問

我需要找到一種方法來識別和提取都來自同一個表中的行,即未在發現其他。任何人都可以給我一個關於如何去做的建議嗎?我嘗試了各種方法,但無濟於事。

謝謝!

+0

訪問支持LEFT JOIN。將所有列從A加入到所有列B.然後僅顯示那些B爲NULL的列。這會給你A中所有的記錄而不是B. – xQbert

+0

謝謝。這個連接會將A的整行與B的整行進行比較以確定是否存在重複? –

+0

是的,但是一個工會也可以和一個聚合一起工作...... – xQbert

回答

1

使用LEFT JOIN(只顯示那些有否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和骨料:這將顯示的記錄從一個表中不在另一個表中(A不在B中,B不在A中)聯合所有並沒有區分重複(聯合做了區分)然後我們排除了多於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所以我們知道記錄來自哪個表。最大(src)的作品,因爲記錄只存在於一個地方。我們排除了這兩者。

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 

對我也工作了,如果我把所有的單組之間遵循ON 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 

額外的信息在這裏有點: 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