首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Like操作符上的SQL Join

Like操作符上的SQL Join
EN

Stack Overflow用户
提问于 2020-03-26 01:03:16
回答 2查看 45关注 0票数 0

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
select *
from TableA as A left join
     TableB as B
     on B.EmpNo like '%' + A.EmpNo + '%' and A.EmpNo is not null

需要的输出:

代码语言:javascript
复制
EmpNo   EmpName      ID
101     John Doe     250
102     Jane Doe     251
101     Bryan Adams  252

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

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2020-03-26 01:37:48

你似乎走在正确的道路上,update语句应该看起来像下面这样,还要注意我是如何使like比较更准确的:

代码语言:javascript
复制
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的时候,它会被打破,所以这不是一个很好的匹配,所以让我们再来看看:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2020-03-26 01:44:37

如果你的问题确实是你得到了你不想要的副本,你可以抛出一个DISTINCT。但你的问题出在数据上:布莱恩·亚当斯和约翰·多伊的雇员编号都是101,所以当你加入TableB时,他们看起来是重复的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60853738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档