У меня есть две таблицы из двух разных баз данных, и оба содержат lastName
и firstName
столбцы. Мне нужно создать JOIN
отношения между ними. Столбцы lastName
соответствуют примерно 80% времени, а столбцы firstName
соответствуют только примерно 20% времени. И каждая таблица имеет совершенно разные первичные ключи personID
.Две таблицы с похожими столбцами, но разные первичные ключи
Вообще говоря, какие бы «лучшие практики» и/или советы использовать, когда я добавляю внешний ключ в одну из таблиц? Поскольку у меня около 4000 отдельных лиц, мы с благодарностью будем приветствовать любые советы по экономии труда.
Образец несоответствующие данные:
db1.table1_____________________ db2.table2_____________________
23 Williams Fritz 98 Williams Frederick
25 Wilson-Smith James 12 Smith James Wilson
26 Winston Trudy 73 Winston Gertrude
Имейте в виду: иногда они совпадают точно, часто они не делают, а иногда двух разных людей будет иметь тот же имя/фамилия.
Между этими данными образца нет прямого отношения - должно ли это быть «соединение» или нет? –
Это показало наихудшие примеры несоответствующих данных. Но ваш превосходный ответ ниже точно отражает то, как сначала пройти прочные совпадения, а затем разобраться с несогласованными, а также с дублирующимися данными. И да, есть другие области, которые помогут, например, то, из чего США из США. Я также попробую немного подстроки и функции регулярных выражений; таких как lastName плюс firstInitial. Еще раз спасибо! – KiloVoltaire
@KiloVoltaire Я хотел бы предложить одну битную возможность получить частично соответствующие строки - если у вас несколько столбцов (вы сказали State), то вы можете сделать join на «количество совпадающих столбцовL» - скажем, у вас есть только 3 - первый/последний имя и состояние, и вы можете написать, так что совпадение в любом из двух из них будет выполняться так же, как и первое и состояние, то же самое последнее и состояние и т. д. больше столбцов у вас есть лучшие результаты, которые вы получаете, только вам нужно получить правильный порог (4 из 7 вернут намного больше, чем 6 из 7). И вы могли бы вычислить счет на разнице в строках (возможно, расстояние Левенштейна). – jkavalik