And there is no general rule for this Key1 field that we could use to clean it up ?
I would rather go maybe to the source of the data to clean it up a bit.
As only idea (rather bad one ) i have is an inner join which would match all values with all other values, then when you have it in one table you could use the wildmatch fucntion in where clause for Key and Key1 fields, so in the table you would have only matching lines of data, and this table could be then used for applymap().
I would give a try to inner join table 1 and table 2, then i woudl load that table residently with a clasue: WHERE wildmatch(Key1,'*'&Key&'*'); and this should return hopefully matched values, i do not know if you can have some multiplication in this, depends on the values in Key1 and Key fields.
Then you could use this table for mapping load.
It is possible that the strings could repeat itself i do not know if this would be "bulletproof".
But maybe it is worth a try if the tables are not to big.