为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用部分名称进行匹配

如何使用部分名称进行匹配

森林海 2022-05-24 16:06:41
我在选择匹配的主键时遇到问题。我的问题如下:给定两张表,一张包含员工姓名及其员工 ID,另一张仅包含员工姓名(非标准格式)和相关信息。我想将它们组合在一起,但由于名称无法完全匹配。我能做些什么?表格可能如下所示:T1FirstName    LastName     EmployeeID  Newsom       Tom           001  Greg         Thomas        002  Henry        Peter         003T2 FirstName      LastName        HiringDate    Gender   Tom          Newson Jr.      01/01/2019      M   Greg          Thomas         01/01/2019      M   Peter Sr.      Henry         01/01/2019      M从表中可以看出,名称不匹配。有没有办法将其正式化?名称可以是主键吗?
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

评论太长了。

您确实无法以这种方式自动进行名称匹配。第一个明显的问题是两个员工可能有相同的名字,例如“Jane Doe”。那么就没有办法消除它们的歧义。

另一个问题是名称可以颠倒。““托马斯·威廉姆斯”和“威廉·托马斯”一样吗?

您可以做的最好的事情是设置手动过程。这可能采取将所有名称转储到电子表格中并手动选择规范形式的形式。然后,用两个新表加载数据库:

  • Names其中包含员工 ID 和正确的姓名形式。

  • Nicknames其中有名称的替代渲染。

这是一个手动过程,可能很费力。对于大量名称,肯定有可以提供帮助的工具。花费数百美元,您甚至可能在对其他工具进行适当调查之前就完成了。


查看完整回答
反对 回复 2022-05-24
?
暮色呼如

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 '%'))


查看完整回答
反对 回复 2022-05-24
?
跃然一笑

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,'%')

)


查看完整回答
反对 回复 2022-05-24
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号