Как удалить из таблицы торговый код, где у меня есть ребенок без родителя? - PullRequest
0 голосов
/ 12 апреля 2020

проблема

Как удалить строки из торгового кода таблицы, где у меня есть значение childcode без значения parentcode?

Существуют родительское значение и значение childcodevalue для торгового кода таблицы на основе таблицы

MappingCodeValue parentcodevalue и childcodevalue.

, поэтому мне нужно удалить записи из таблицы торговых кодов, которые не имеют parentcodevalue

в торговом коде таблицы, основанном на mappingcodevalue таблицы

, поэтому в соответствии с моим объяснением две строки 5 , 6 в таблице торговых кодов будут удалены

TradeCodeId  PartId CodeType   CodeValue    
5        1444   ECCS-URB    AB666-URB             
6        1931   ECCS-URB    AB778-URB

5, а 6 является значением дочернего кода и не имеет строк родительского значения, как AB666-US и AB778-US

, так что это неправильно, и я удалю его

но другие строки в торговом коде имеют значение родительского кода и значение дочернего кода

в соответствии с таблицей mappingcodevalue, так что это правильно

, так как написать запрос удалить строки, childcodevalue и не имеют

parentcodevalue из торгового кода

в зависимости от значения, существующего в mappingco значение

drop table #MappingCodeValue
drop table #TradeCode
create table #MappingCodeValue
 (
 id int identity (1,1),
 ParentCodeType  nvarchar(50),
 ParentCodeValue  nvarchar(50),
 ChildCodeType  nvarchar(50),
 ChildCodeValue  nvarchar(50)
 )
 INSERT INTO #MappingCodeValue
 (ParentCodeType,ParentCodeValue,ChildCodeType,ChildCodeValue)
 VALUES
 ('ECCS-US','AB123-US','ECCS-URB','AB123-URB'),
 ('ECCS-US','AB555-US','ECCS-URB','AB555-URB'),
 ('ECCS-US','AB666-US','ECCS-URB','AB666-URB'),
 ('ECCS-US','AB778-US','ECCS-URB','AB778-URB')


 CREATE TABLE #TradeCode
 (
 TradeCodeId int identity(1,1),
 PartId  int,
 CodeType  nvarchar(50),
 CodeValue nvarchar(50)
 )
 insert into #TradeCode(PartId,CodeType,CodeValue)VALUES
 (1222,'ECCS-US','AB123-US'),
 (1255,'ECCS-US','AB555-US'),
 (1222,'ECCS-URB','AB123-URB'),
 (1255,'ECCS-URB','AB555-URB'),
 (1444,'ECCS-URB','AB666-URB'),
 (1931,'ECCS-URB','AB778-URB')

что я пробую

delete t from #tradecode t 
 left join  #mappingcodevalue pn on t.CodeValue=pn.ParentCodeValue and t.CodeType=pn.ParentCodeType
 where t.CodeValue is null

см. изменения изображения enter image description here

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Я делаю этот запрос ниже и выдаю мне результат, который мне нужен

delete from #TradeCode where PartId
not in (select t.PartId from #TradeCode t inner join #MappingCodeValue m
on t.CodeType = m.ParentCodeType and t.CodeValue = m.ParentCodeValue
where
(t.CodeValue = m.ParentCodeValue and t.CodeType = m.ParentCodeType) or
(t.CodeValue = m.ChildCodeValue and t.CodeType = m.ChildCodeType)
)
0 голосов
/ 12 апреля 2020

Вы используете left join, поэтому в результате не будет записи, которая имеет значение NULL для левого столбца таблицы (t в вашем случае, поэтому ни одна запись не будет иметь NULL для t.CodeValue).

Вы всегда можете сначала проверить, выбрав записи без условия where, чтобы увидеть, каковы должны быть условия для удаления нежелательных записей.

Не будет никаких соответствующих запишите в таблицу #MAppingCodeValue в соответствии с вашим состоянием соединения и предоставьте образцы данных для 4 записей в таблице #TradeCode (см. скриншот ниже).

enter image description here

Пожалуйста, проверьте детали в db <> fiddle .

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