【问题标题】:SQL Join on Like OperatorSQL Join on Like 运算符
【发布时间】:2020-03-25 17:03:16
【问题描述】:

我知道这个问题已被问过几次,我已尝试使用该解决方案来解决我的问题。不幸的是,它没有得到我想要的输出。我需要通过将一个表中的 ID 列加入到另一个表中,而该表中的连接列没有确切值。

TableA                                               TableB
EmpNo   EmpName      ID                              EmpNo          EmpName        ID    TermDate
101     John Doe     Null                            250termed_101  John Doe       250   11-15-2018
102     Jane Doe     Null                            251termed_102  Jane Doe       251   02-25-2019
101     Bryan Adams  Null                            252termed_101   Bryan Adams   252   03-12-2020

这是我尝试过的,但无法获得所需的输出,因为下面的查询给了我重复:

select *
from TableA as A left join
     TableB as B
     on B.EmpNo like '%' + A.EmpNo + '%' and A.EmpNo is not null

需要输出:

EmpNo   EmpName      ID
101     John Doe     250
102     Jane Doe     251
101     Bryan Adams  252

我需要通过在 EmpNo 上连接这 2 个表来将 TableB 中的 ID 列填充到 TableA 中。对于第一条记录,John Doe 于 2018 年 11 月 15 日被终止,他的员工编号被分配给具有唯一 ID 的 Bryan Adams。我需要将表 B 中的 ID 列填充到表 A 中,以获取当时拥有该编号的相应员工。

提前致谢

【问题讨论】:

  • 你能比“失败”更模糊一点吗?请阅读this 了解一些改进问题的技巧。
  • @HABO,这是讽刺还是你的意思是“更具体一点”?
  • 你在什么地方加入两张桌子?如果你不设置连接条件,它将做 2 个表的笛卡尔积。

标签: sql sql-server tsql join sql-server-2017


【解决方案1】:

如果您的问题确实是您得到了不想要的重复项,您可以输入 DISTINCT。但您的问题在于数据:Bryan Adams 和 John Doe 的员工编号均为 101,所以当您加入 TableB 时,它们看起来是重复的。

这个 SQL Fiddle 可能会对您有所帮助:http://sqlfiddle.com/#!18/f30476/10

【讨论】:

    【解决方案2】:

    您似乎走在了正确的道路上,更新语句应该如下所示,还请注意我如何使类似比较更准确:

    update A SET
        ID = B.ID
    from 
        TableA as A 
        left join TableB as B on 
            B.EmpNo like '%_' + A.EmpNo and 
            A.EmpNo is not null;
    

    当你有 101 和 1101 或 2101 时,它会中断,所以这不是一个很好的匹配,所以让我们重新审视一下:

    update A SET
            ID = B.ID
        from 
            TableA as A 
            inner join TableB as B on 
                RIGHT(B.EmpNo, len(B.EmpNo) - charindex('_', B.EmpNo)) = A.EmpNo
                A.EmpNo is not null and --you don't need this, 
                charindex('_', B.EmpNo) > 0;--needed, otherwise you get string errors
    

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多