Я создал функцию VBA в Access 2010, чтобы сравнить список терминов в одной таблице со списком терминов в другой таблице. Если значения одинаковы (не обязательно точное совпадение), я суммирую значение из столбца из второй таблицы для каждого совпадения. TableA имеет приблизительно 150 терминов. TableB имеет приблизительно 50 000 терминов со связанным числом (целое число).Как я могу эффективно сравнивать строковые значения из двух таблиц в Access?
Пример таблица:
TableA TableB
--------- ----------
ID ID
Term Term
Count
У меня есть простой SQL запрос, который вызывает функцию VBA для сравнения терминов и просуммировать количество, если они имеют нечеткий матч.
SQL:
SELECT TableA.[Term], TermCheck(TableA.[Term]) AS [Term Count] FROM TableA ORDER BY 2 DESC;
VBA:
Option Compare Database
Public Function TermCheck(Term) As Long
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("TableB", dbOpenDynaset)
Dim ttl As Long
ttl = 0
With rst
While Not .EOF
If rst(1) Like "*" & Term & "*" Then
ttl = ttl + rst(2)
End If
.MoveNext
Wend
End With
rst.Close
Set rst = Nothing
CurrentDb.Close
TermCheck = ttl
End Function
Проблема у меня есть то, что он использует около 50% моего процессора, и я хотел бы сделать это как можно более. Есть ли более эффективный способ выполнить эту задачу с помощью Access? Переход к чисто SQL-альтернативе на данный момент не является вариантом, хотя это сделает меня счастливее. Я не гуру доступа или VBA, но чувствую, что в своем запросе мне не хватает чего-то очевидного, что улучшит производительность.
EDIT:
Ожидаемый результат можно было бы перечислить все слагаемые в TableA с суммой столбца счета от TableB где произошло нечеткое соответствие.
Пример данных: Результат
TableA
-------------
1 blah
2 foo
3 bar
4 zooba
TableB
-------------
1 blah 16
2 blah2 9
3 foo 7
4 food 3
5 bar 3
Пример:
Term Count
---------------------
blah 25
foo 10
bar 3
zooba 0
Я не могу переместить его в SQL для целей доставки. В настоящее время у клиента нет доступной среды SQL для установки решения на базе SQL. – thisIsSteve
Чтобы прояснить, по чисто SQL, я имел в виду что-то вроде SQL Server/MySQL/Oracle. – thisIsSteve