如何删除有孩子但没有父母的表贸易代码?

问题描述 投票:0回答:2

问题

如何从具有我的孩子代码值而没有parentcodevalue的表交易代码中删除行?

基于表的表交易代码上存在parentcodevalue和childcodevalue

MappingCodeValue父代码值和子代码值。

所以我需要从交易代码表中删除没有parentcodevalue的记录

基于表映射代码值的表交易代码

所以根据我的解释,交易代码表上的两行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而不具有的代码行

交易代码中的父代码值

基于值存在于mappingcodevalue上

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

sql-server stored-procedures ssis sql-server-2012 temp-tables
2个回答
0
投票

[您正在使用left join,因此结果中将没有任何记录的左侧表列具有NULL值(在您的情况下为t,因此,对于[ C0])。

您总是可以通过选择不带NULL子句的记录来进行检查,以了解删除不想要的记录的条件。

根据您的加入条件,表t.CodeValue中没有任何对应的记录,表where中为4条记录提供的示例数据(请参见下面的屏幕截图)。

#MAppingCodeValue

请检查#TradeCode中的详细信息。


0
投票

我在下面执行此查询,并提供所需的结果

enter image description here
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.