Слияние поиска нескольких условий – SQL Server

Я пытаюсь понять условие поиска слияния и столкнулся с следующей проблемой.

Таблица 1

id groupid description ------------------------- 1 10 Good 2 20 Better 

Таблица 2

 id groupid description ------------------------- 1 10 Very Good 1 20 Much Better 

Я намерен объединить источник (table1) в target (table2) с идентификатором, присутствующим в обоих, но только с groupid = 20, присутствующим в целевой таблице.

Вот что я пишу

 Merge table1 source Using table2 target ON (target.id = source.id AND target.groupid = 20) When Matched Then update set target.description = source.description 

Результат, который я ожидаю, это

Таблица 2

 id groupid description ------------------------- 1 10 Very Good 1 20 Good 

Но я не уверен на 100% предложения ON (условие поиска слияния) с несколькими условиями проверки target.id = source.id and target.groupid = 20 . Является ли результат всегда предсказуемым и соответствует ожиданию выше в этих нескольких условиях? Или предсказуемость вопроса здесь, и я должен добавить target.groupId = 20 в условие «когда соответствует И»?

Похоже, ваше соединение ошибочно. Вам нужно либо присоединиться к GROUPID, либо ваши данные неверны.

ВСТУПЛЕНИЕ НА ГРУППУ

 create table #table1 (id int, groupid int, description varchar(64)) create table #table2 (id int, groupid int, description varchar(64)) insert into #table1 values (1,10,'Good'), (2,20,'Better') insert into #table2 values (1,10,'Very Good'), (1,20,'Much Better') Merge #table2 t Using #table1 s ON (t.groupid = s.groupid AND t.groupid = 20) When Matched Then update set t.description = s.description; select * from #table2 drop table #table2 drop table #table1 

В противном случае нет никакого способа соотнести «лучше» от ID = 2 до строки, где ID = 1 . Это противоречит исходному состоянию соединения в столбце ID .

ОСНОВАННЫЙ ОЖИДАЕМЫЙ ВЫХОД

 create table #table1 (id int, groupid int, description varchar(64)) create table #table2 (id int, groupid int, description varchar(64)) insert into #table1 values (1,10,'Good'), (2,20,'Better') insert into #table2 values (1,10,'Very Good'), (1,20,'Much Better') Merge #table2 t Using #table1 s ON (t.id = s.id) --you could also put the and t.groupid = 20 here... When Matched and t.groupid = 20 Then update set t.description = s.description; select * from #table2 drop table #table2 drop table #table1 
Давайте будем гением компьютера.