Как обновить статус с помощью данных о конфликтах, когда у временной таблицы химических веществ одинаковый химический идентификатор для временной таблицы #temp? - PullRequest
0 голосов
/ 26 января 2020

Как обновить статус с помощью данных о конфликтах, в которых для ChemicalId для временной таблицы #chemical есть такой же химический идентификатор для временной таблицы #temp?

шагов для достижения этого

1 - получить связанные детали для детали существует во временной таблице #temp, которая имеет такой же маскированный идентификатор в временной таблице # parts

, в этом случае результатом будет

PartId  MaskId   ChemicalId
200     1000     901
500     1700     909
600     1700     909

2 - проверка временной таблицы #chemical для partid или связанной части id для того же maskId

если химическое вещество на шаге 1 отличается от химического вещества в химическом веществе временной таблицы, то ничего не происходит в статусе.

если химическое вещество в шаге 1 такое же химическое вещество в химическом веществе временного стола, тогда статус будет обновляться до конфликт основан на идентификаторе детали.

Здесь 200 имеют 901 химический идентификатор для временной таблицы #temp, а химическая временная таблица имеет 901 для 100, тогда статус будет конфликтным, поскольку он связан с тем же идентификатором маски и имеет одинаковый химический идентификатор 901 .

Здесь 700 имеют 909 химических идентификаторов для временной таблицы #temp, а для химической временной таблицы 909 для 500 и 600, тогда статус будет ничего не изменилось, потому что он связан с идентичным идентификатором маски и имеет другой химический идентификатор 920.

create table #temp
(
partid     int,
maskid     int,
chemicalid int,
status  nvarchar(50)
)
insert into #temp
values
(100,1000,901,null),
(700,1700,909,null)

create table  #parts
(
PartId  int,
maskId  int
)

insert into #parts (PartId,maskId)
values
(100,1000),
(200,1000),
(500,1700),
(600,1700),
(700,1700)


create table  #Chemical
(
Chemicalmasterid  int,
ChemicalId  int,
PartId   int
)                        
insert into  #Chemical(Chemicalmasterid,ChemicalId,PartId)
values
(1 ,901,100),
(7 ,920,700)

final result
100     1000 901 conflict chemical id
700     1700 909     null

что я пробовал

update t set status ='conflict chemical id' from #temp t

1 Ответ

0 голосов
/ 26 января 2020

Этот лог c довольно запутанный, но вы даете примерные данные и промежуточные результаты.

Мне кажется, я понимаю, что вы пытаетесь сделать. Я думаю, что этот запрос делает это:

update t
    set status ='conflict chemical id'
    from temp t join
         parts p
         on p.maskid = t.maskid and
            p.partid <> t.partid join
         chemical c
         on c.partid = t.partid
     where exists (select 1 from chemical c where c.partid = t.partid and c.chemicalid = t.chemicalid);

Здесь - это db <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...