A lot is going to have to be by manual inspection - look for patterns, match those off then look for the next pattern
to look for same words you could use a vba function to make a comparison and return any sort of match
basically split each name on a space into an array then compare all the elements of one array with all the elements of the other array
very basic but something like
Code:
public function comparestrings(string1 as string, string2 as string) as integer
dim I as integer
dim j as integer
dim sarr1() as string
dim sarr(2) as string
comparestrings=0
sarr1=split(string1," ")
sarr2=split(string2," ")
for I=1 to ubound(sarr1)
for j=1 to ubound(sarr2)
if sarr(I)=sarr(j) then comparestrings=comparestrings+1
next j
next I
end function
the higher the value comparestrings returns the closer the match
so put the above code in a module and call it in a query - then sort on the result - at least it will give you some focus on possible matches
Code will probably need to be modified to protect against null values
sql would be something like
Code:
select table1.id, table1.fullname, table2.id, table2.fullname, comparestrings(nz(table1.fullname,"ignore"), nz(table2.fullname,"ignore")) as Score
from table1, table2
and will not doubt take a long time to run - if each table has 1000 records, that is 1000*1000 comparisons and assuming each name has 3 component parts you can multiply that figure by 9 - so around 9 or 10 million comparisons. But you may have ways or reducing that