Обновите строку в TABLE1, используя значение из другой строки в TABLE1, чтобы найти значение в TABLE2 - PullRequest
1 голос
/ 26 мая 2019

У меня есть следующая таблица

TABLE1

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   

и TABLE2

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

Мне нужно обновить Type в TABLE1, ГДЕ Type = 'branchid', используязначение в Type = 'companyid' для того же идентификатора пользователя.Как только у меня будет правильный 'companyid', я хочу использовать следующий SELECT, чтобы получить TOP BranchId из TABLE2

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

Как этого добиться в одном операторе обновления?

Ответы [ 2 ]

3 голосов
/ 26 мая 2019

Вот удар:

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'
0 голосов
/ 26 мая 2019

Я не уверен, что полностью понимаю вопрос, но, может быть ...

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...