首页 > 解决方案 > 如何从没有父级的表中删除子记录

问题描述

如何从表 tradecode 中删除在 tradecode 上没有父级的子记录?

基于表 MappingCodeValue parent 和 child 的 table trade code 上存在 parent 和 child

所以我需要从贸易代码表中删除在表贸易代码上没有父级的记录

所以根据我的解释,贸易代码表上的两行 5,6 将被删除

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

5 和 6 是子行,没有 AB666-US 和 AB778-US 的父行

所以它错了,我会删除它

但贸易代码上的另一行根据表映射代码值有父和子,所以它是正确的

那么如何从交易代码中编写查询删除具有子行且没有父行的行

基于映射码值上存在的值

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','AB756-US','ECCS-URB','AB756-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')

标签: sql

解决方案


我会使用'NOT IN'。

如在

SELECT *
from childtable
where parentid not in (select id  from parenttable)

推荐阅读