sql - 如何从没有父级的表中删除子记录
问题描述
如何从表 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')
解决方案
我会使用'NOT IN'。
如在
SELECT *
from childtable
where parentid not in (select id from parenttable)
推荐阅读
- android - 无法在 android studio 中解析符号 REQUEST_PERMISSIONS 和 myMethod() 这是我的代码
- java - 订阅 Redis 中的键子集
- r - 计算列表的整数个数及其百分比
- json - AWS AppSync:如何通过 DynamoDB 返回有效的 JSON
- mysql - Mysql ERROR 1071 (42000): 指定的key太长;最大密钥长度为 3072 字节
- java - 如何控制加密字符串的长度(密码学 - 加密)
- vuejs2 - 在类星体框架中存储全局对象的位置
- java - MongoDB使用Java使用正则表达式查询字段中的值
- mysql - MySQL 复杂条件选择查询
- rest - 关于 HTTP 动词的困惑