我有两个来自两个不同数据库的表,它们都包含lastName
和firstName
列。我需要创建JOIN
,这两者之间的关系。lastName
列的匹配率约为80%,而firstName
列的匹配率仅为20%。每个表有完全不同的personID
主键。
不匹配数据样本:
db1.table1_____________________ db2.table2_____________________
23 Williams Fritz 98 Williams Frederick
25 Wilson-Smith James 12 Smith James Wilson
26 Winston Trudy 73 Winston Gertrude
请记住:有时他们完全匹配,但经常不匹配,有时两个不同的人会有相同的姓。
可以加入多个字段
select *
from table1
inner join table2
on table1.firstName = table2.firstName
and table1.lastName = table2.lastName
从这里你可以确定有多少重复的名字/姓氏组合。
select table1.firstName, table2.lastName, count(*)
from table1
inner join table2
on table1.firstName = table2.firstName
and table1.lastName = table2.lastName
group by table1.firstName, table2.lastName
having count(*) > 1
反过来,您也可以确定那些匹配相同且仅匹配一次的:
select table1.firstName, table2.lastName
from table1
inner join table2
on table1.firstName = table2.firstName
and table1.lastName = table2.lastName
group by table1.firstName, table2.lastName
having count(*) = 1
最后一个查询可能是执行大量外键更新的基础。
对于那些在表之间匹配不止一次的名称,它们可能需要某种形式的人工干预,除非表中有其他字段可以用来区分它们。