3 回答

TA贡献2003条经验 获得超2个赞
评论太长了。
您确实无法以这种方式自动进行名称匹配。第一个明显的问题是两个员工可能有相同的名字,例如“Jane Doe”。那么就没有办法消除它们的歧义。
另一个问题是名称可以颠倒。““托马斯·威廉姆斯”和“威廉·托马斯”一样吗?
您可以做的最好的事情是设置手动过程。这可能采取将所有名称转储到电子表格中并手动选择规范形式的形式。然后,用两个新表加载数据库:
Names
其中包含员工 ID 和正确的姓名形式。Nicknames
其中有名称的替代渲染。
这是一个手动过程,可能很费力。对于大量名称,肯定有可以提供帮助的工具。花费数百美元,您甚至可能在对其他工具进行适当调查之前就完成了。

TA贡献1853条经验 获得超9个赞
你可以从这样的事情开始:
with t1 (fnam,lnam,eid) as (values
('Newsom','Tom','001'),
('Greg','Thomas','002'),
('Henry','Peter','003')
),
t2 (fnam,lnam,hired,gender) as (values
('Tom','Newson Jr.','01/01/2019','M'),
('Greg','Thomas','01/01/2019','M'),
('Peter Sr.','Henry','01/01/2019','M')
) select t1.lnam as fnam,
t1.fnam as lnam,
t1.eid as emp_id,
t2.hired as date_hired,
t2.gender as gender
from t1
cross join t2
where ((t1.lnam like '%' concat t2.fnam concat '%' or
t1.fnam like '%' concat t2.lnam concat '%')
and
(t2.fnam like '%' concat t1.lnam concat '%' or
t2.lnam like '%' concat t1.fnam concat '%'))
or
((t1.fnam like '%' concat t2.fnam concat '%' or
t1.lnam like '%' concat t2.lnam concat '%')
and
(t2.fnam like '%' concat t1.fnam concat '%' or
t2.lnam like '%' concat t1.lnam concat '%'))

TA贡献1826条经验 获得超6个赞
有几个解决方案。如果您可以更改表以使其EmployeeID作为主键并将其也用作另一个表中的外键,那么那将是最好的。除此之外,您可以尝试以下查询:
此 sql 用于 Mysql 数据库
select * from
T1 join T2
on (
concat(T2.Firstname,T2.Lastname) like concat('%',T1.Firstname, T1.Lastname,'%')
OR
concat(T2.Lastname,T2.Firstname) like concat('%',T1.Firstname, T1.Lastname,'%')
)
添加回答
举报