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

时间:2015-05-25 04:32:46

标签: mysql join compare multiple-databases

我有两个来自两个不同数据库的表,它们都包含lastNamefirstName列。我需要创建JOIN两者之间的关系。 lastName列匹配约80%的时间,而firstName列仅匹配约20%的时间。每个表都有完全不同的personID主键。

一般来说,什么是最佳实践"和/或当我向其中一个表添加外键时使用的提示?由于我有大约4,000个不同的人,所以我们将非常感谢任何省力的提示。

样本不匹配的数据:

db1.table1_____________________  db2.table2_____________________
23    Williams       Fritz       98   Williams       Frederick
25    Wilson-Smith   James       12   Smith          James Wilson
26    Winston        Trudy       73   Winston        Gertrude

请记住:有时它们完全匹配,通常不会,有时两个不同的人会有相同的名/姓。

1 个答案:

答案 0 :(得分:1)

您可以加入多个字段。

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

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

对于那些在表之间不止一次匹配的名称,他们可能需要某种手动干预,除非表中还有其他字段可用于区分它们吗?