【问题标题】:Update row in TABLE1 using value from another row in TABLE1 to lookup value in TABLE2使用 TABLE1 中另一行的值更新 TABLE1 中的行以查找 TABLE2 中的值
【发布时间】:2019-05-26 18:22:21
【问题描述】:

我有一张如下表

表 1

Id   UserId  Type       Value
1    AAA     companyid  123
2    AAA     branchid   
3    BBB     companyid  124
4    BBB     branchid   
5    CCC     companyid  125
6    CCC     branchid   

和表2

BranchId   CompanyId   Name
1          123         RedBranch
2          123         YellowBranch
3          123         GreenBranch
4          124         SouthBranch
5          125         NorthBranch

我需要使用相同 UserId 的 Type = 'companyid' 中的值更新 TABLE1 WHERE Type = 'branchid' 中的类型。一旦我有了正确的 'companyid',我想使用以下 SELECT 从 TABLE2 中获取 TOP BranchId

SELECT TOP 1 Id 
FROM TABLE2
WHERE CompanyId = (correct companyid from TABLE1)
ORDER BY Id DESC

如何在一个更新语句中实现这一点?

【问题讨论】:

  • 您的意思是您实际上想要使用表 2 填写表 1 中的空白值?
  • 是的,但是从 TABLE2 中获取 TOP 对应的 id。因此,对于 CompanyId 123,我希望 TABLE1 中的 branchid 用户 BBB 为 3
  • 对于 CompanyID = 123,有 3 个分支(红色、黄色和绿色)。应该选择哪一个来更新 TABLE1 中的分支?
  • 编辑了最后一条评论来解释。应该是 3

标签: sql sql-server sql-update


【解决方案1】:

这是一个尝试:

update T1
set Value = (select max(BranchId) from Table2 where CompanyId = T1a.value)
from Table1 T1
inner join Table1 T1a on T1a.UserId = T1.UserId and T1a.Type = 'companyid'
where T1.Type = 'branchid'

【讨论】:

    【解决方案2】:

    我不确定我是否完全理解这个问题,但也许...

    with maxBranch as
    (
    select
         max(BranchId) as BranchId
        ,CompanyId
    from TABLE2
    group by CompanyId
    )
    update t1
    set t1.Value = m.BranchID
    from TABLE1 as t1
    join TABLE1 as t11
        on t1.UserId = t11.UserId
        and t1.Type = 'branchid'
        and t11.Type = 'companyid' 
    join maxBranch as m
        on m.CompanyId = t11.Value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      相关资源
      最近更新 更多