ahmed_sa Ответов: 1

Как написать запрос return status conflict, если связанные с маской части не имеют одинакового checmicalid ?


create table #temp
(
partid     int,
maskid     int,
chemicalid int,
status  nvarchar(50)
)
insert into #temp
values
(100,1000,901)
(700,1700,909)
(400,1500,920)
Parts   
pk       
PartId    maskId
100       1000
200       1000
400       1500
600       1700
700       1700

Chemical Master Table
   PK                          fk
Chemicalmasterid  ChemicalId  PartId
  1                901         100
  2                902         200
  4                920         400
  6                909         600
  7                909         700




Мне нужно написать запрос делать

update status='conflict chemical id' где
другие части, связанные с одной и той же маской в таблице temp #temp, имеют другой checmicalid

для объяснения

#таблица temp имеет часть 100 для masked 1000 и checmicalId 901
Я буду искать по базе данных

Есть ли у маски номер 1000 родственные части на столе, части имеют одинаковый маскид ?

да так оно и есть

какие еще части имеют такой же маскид ?

200 у maskid 1000

Являются ли эти части, как 200, имеют тот же chemicalid, что и существуют в таблице temp #temp для того же maskId ?

Нет, тогда статус будет " conflict checmical id "

конфликт состояний из-за того, что maskId 1000 имеет chemicalId 901 на временной таблице #temp, но на частях таблицы
родственные части имеют такой же маскид имеют различный химикалид как 902

Что я уже пробовал:

finalResult
100 1000 901  conflict chemicalid
700 1700 909
400 1500 920

Maciej Los

Перестаньте задавать один и тот же вопрос несколько раз!

ahmed_sa

спасибо за ответ это не тот же самый вопрос
если я задам больше вопросов по одному вопросу это будет трудно понять

ZurdoDev

Ответьте на комментарий так, чтобы пользователь был уведомлен.

1 Ответов

Рейтинг:
5

MarcusCole6833

declare @t table
(
partid     int,
maskid     int,
chemicalid int,
status  nvarchar(50)
)
insert into @t
(partid, maskid, chemicalid )
values
(100,1000,901),
(700,1700,909),
(400,1500,920)

declare @p table
(
partid int, maskid int
)
insert into @p
(partid, maskid )
values
(100,1000),
(200,1000),
(400,1500),
(600, 1700 ),
(700, 1700)

;with t as 
(
	select p1.partid from @p p1
	inner join @p p2 on p1.maskid = p2.maskid and p1.partid != p2.partid
	
)

update t1
set [status] = 'conflicted'
from @t t1 
inner join t  t2
on t1.partid = t2.partid 


select * from @t



Я бы поискал самосоединения

sql - что такое SELF JOIN и когда вы его используете? - переполнение стека[^]