具有相似列但主键不同的两个表
Two tables with similar columns but different primary keys
我有两个来自两个不同数据库的 table,并且都包含 lastName
和 firstName
列。我需要在两者之间建立 JOIN
关系。 lastName
列大约有 80% 的时间匹配,而 firstName
列只有大约 20% 的时间匹配。每个 table 都有完全不同的 personID
主键。
一般来说,当我向 table 之一添加外键时,有哪些 "best practices" and/or 技巧可以使用?由于我有大约 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
请记住:有时他们完全匹配,通常他们不匹配,有时两个不同的人会有相同的 first/last 名字。
您可以加入多个字段。
select *
from table1
inner join table2
on table1.firstName = table2.firstName
and table1.lastName = table2.lastName
由此您可以确定有多少 'duplicate' 名字/姓氏组合。
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
最后一个查询可能是执行大量外键更新的基础。
对于那些在 table 之间匹配不止一次的名称,他们可能需要某种手动干预,除非 table 中有其他字段可用于区分它们?
我有两个来自两个不同数据库的 table,并且都包含 lastName
和 firstName
列。我需要在两者之间建立 JOIN
关系。 lastName
列大约有 80% 的时间匹配,而 firstName
列只有大约 20% 的时间匹配。每个 table 都有完全不同的 personID
主键。
一般来说,当我向 table 之一添加外键时,有哪些 "best practices" and/or 技巧可以使用?由于我有大约 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
请记住:有时他们完全匹配,通常他们不匹配,有时两个不同的人会有相同的 first/last 名字。
您可以加入多个字段。
select *
from table1
inner join table2
on table1.firstName = table2.firstName
and table1.lastName = table2.lastName
由此您可以确定有多少 'duplicate' 名字/姓氏组合。
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
最后一个查询可能是执行大量外键更新的基础。
对于那些在 table 之间匹配不止一次的名称,他们可能需要某种手动干预,除非 table 中有其他字段可用于区分它们?