2017-03-13 50 views
0

我正致力於消除MS Access中兩個表中的不匹配行的自動化。衆所周知,Access有一個名爲Find unmatched records的查詢嚮導。即使對於500k數據行,此方法也可以快速運行。SQL查詢工作比訪問查詢嚮導慢

但是,當我在MS Access VBA中執行查詢時,它的工作速度如此之慢。有更快的SQL實現來消除數據,還是MS Access使用不同的方法?我怎樣才能讓它快速?

以下是我在VBA中的查詢。表1和表2各有超過100k行。

strQuery = SELECT gsmno INTO newtablename FROM table1 WHERE gsmno NOT IN (SELECT gsmno FROM table2) 
CurrentDb.Execute strQuery 
+1

NOT IN在MS Access中通常是一個壞主意。你可以不用gsmno來檢查空值嗎? – Fionnuala

+1

順便說一句,通常最好使用CurrentDB的一個實例,例如'Set db = CurrentDB',這允許你檢查返回的記錄等等。 – Fionnuala

+0

如何返回未調整的數據檢查空值?你能寫出你想要的查詢來幫助我嗎? –

回答

1

使用LEFT OUTER JOIN並檢查Table2 gsmno上的NULL。那些是你的不匹配。

strQuery = & _ 
"SELECT " & _ 
" t1.gsmno " & _ 
"INTO " & _ 
" newtablename " & _ 
"FROM " & _ 
" table1 as t1 " & _ 
"LEFT OUTER JOIN " & _ 
" table2 as t2 on " & _ 
"  t1.gsmno = t2.gsmno " & _ 
"WHERE " & _ 
" isnull(t2.gsmno) = true;" 

CurrentDb.Execute strQuery