【问题标题】:Match names from one table with names from other将一个表中的名称与另一表中的名称匹配
【发布时间】:2021-12-08 03:16:26
【问题描述】:

我有一张桌子

CID FirstName LastName Loc
123 Brad Shaw ASD
234 Chad Reed SES
345 Bryan Miles WED
456 Mr Bradley Knight ASD
567 Doctor Chadwick Prince WED
678 Mrs Bryana Yang SES
789 Arty-stry Blue POR

另一张桌子

FirstName
Bryan
Ben
Brad
Chad

我希望得到一个结果,将第二个表中的所有名称与第一个表中的名称匹配,无论第二个表中的名称是否形成第一个表的子字符串。

CID FirstName LastName Loc TABLE2_MATCH
123 Brad Shaw ASD Brad
234 Chad Reed SES Chad
345 Bryan Miles WED Bryan
456 Mr Bradley Knight ASD Brad
567 Doctor Chadwick Prince WED Chad
678 Mrs Bryana Yang SES Bryan
789 Arty-stry Blue POR No_match

我有数千个名字,我需要找到一种更好的方法,目前我正在尝试执行 IN 语句,但它匹配确切的名称,因为我希望子字符串也匹配。我希望这很清楚。很高兴提供更多信息

【问题讨论】:

    标签: sql teradata teradata-sql-assistant teradatasql


    【解决方案1】:

    查找所有外连接,其中来自 table1 的 FirstNamelike table2 的 FirstName 包裹在 '%' 中:

    select
      a.CID,
      a.FirstName,
      a.LastName,
      a.Loc,
      coalesce(b.FirstName, 'No_match') as TABLE2_MATCH
    from table1 a
    left join table2 b on lower(a.FirstName) like '%' || lower(b.FirstName) || '%'
    

    作为字符串Y的子串的字符串X可以表示为Y like '%X%'
    lower() 的调用使其不区分大小写,但如果删除对lower() 的调用,看看它是否仍然有效。

    【讨论】:

    • Teradata 中不需要 lower,因为这些列可能定义为 not casepecificconcat 是最近才实现的,标准 SQL '%' || b.FirstName || '%') 也可以工作。
    • 简洁明了,易于理解。多谢了。这也将帮助我清理其他一堆表格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2013-05-29
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2017-06-02
    • 2019-12-25
    相关资源
    最近更新 更多