两个列相似但主键不同的表



我有两个来自两个不同数据库的表,它们都包含lastNamefirstName列。我需要创建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

请记住:有时他们完全匹配,但经常不匹配,有时两个不同的人会有相同的姓。

可以加入多个字段

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

最后一个查询可能是执行大量外键更新的基础。

对于那些在表之间匹配不止一次的名称,它们可能需要某种形式的人工干预,除非表中有其他字段可以用来区分它们。

相关内容

  • 没有找到相关文章

最新更新