2016-04-26 65 views
-1

我想運行一個檢查,看看如果表A中的4列與表B中的4相同,那麼測試第5列中的值是否相同。 (對於20,000-40,000)記錄在每個表中。MS Access/SQL加入大型數據集

我已經嘗試在訪問中這樣做,但它似乎掛起,我可以理解爲什麼考慮數據集是相當大的。

我已經嘗試加入問題的4列,我試圖在每個連接並比較連接。問題是它既是掛起來的,也不會返回結果。

任何人都可以建議正確/更好的方法來解決這個問題嗎?

我能想到的唯一事情就是先排序數據,但這可能會很慢,我不知道Select查詢是否提前退出。 預先感謝您。

太慢1

SELECT TableA.ColA, TableA.ColB, TableA.ColC, TableA.ColD, TableA.ColE, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD, TableB.CoLE FROM TableA INNER JOIN Table B ON(TableA.ColA = TableB.ColA, TableA.ColB =TableB.ColB, TableA.ColC = TableB.ColC, TableA.ColD = TableB.ColD)

太慢2 SELECT DISTINCT TableA.ColA & TableA.ColB & TableA.ColC & TableA.ColD AS C1, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD AS C2, TableA.ColA, TableA.ColB, TableA.ColC, TableA.ColD, TableA.ColE, TableB.ColA, TableB.ColB, TableB.ColC, TableB.ColD, TableB.ColE FROM TableA, Table B WHERE TableA.ColA & TableA.ColB & TableA.ColC & TableA.ColD = TableB.ColA & TableB.ColB & TableB.ColC & TableB.ColD

編輯:是否有更好的方法做這樣的檢查的? 編輯:得到太慢2運行,但它花了12.5分鐘的「沒有響應」

+1

使用'和'而不是條件之間的逗號在'INNER JOIN'的'ON '子句:'TableA.ColA = TableB.ColA AND TableA.ColB = TableB.ColB'而不是'TableA.ColA = TableB.ColA,TableA.ColB = TableB.ColB'如果使用Design View Access查詢設計器設置您的連接,它應該爲您提供'ON'子句的正確語法。 – HansUp

+1

在連接字段中添加索引。 – HansUp

+1

使用這些數據表的較小副本進行初始查詢測試......幾十行而不是20,000到40,000行。 – HansUp

回答

0

我不怎麼表現會比你嘗試,但在類似的情況下,我使用聯合查詢設置數據,第二個查詢基於UNION彙總數據,第三個查詢獲取差異。一個額外的功能,以及我這樣做的原因是,它會在任一表中找到與其他表不匹配的記錄 - 我通常需要知道這些記錄。注 - 我使用0假設ColE是數字,並且如果數據是文本,則可能需要調整查詢。

UNION:

Select ColA, ColB, ColC, ColD, ColE as SourceA, 0 as SourceB from TableA 
    Union All Select ColA, ColB, ColC, ColD, 0, ColE from TableB 

摘要:

Select ColA, ColB, ColC, ColD, sum(SourceA) as SourceA, sum(SourceB) as SourceB from UNION 

對比:

Select ColA, ColB, ColC, ColD, SourceA, SourceB from SUMMARY where ((SourceA <> SourceB) or (SourceA is null) or (SourceB is null)) 
+0

謝謝唐喬治。 – calh27