如何基于多子查询批量执行INSERT操作插入多条数据
批量插入依赖关联表数据的解决方案
问题拆解
你需要批量往atransportordercustomfieldv表插入数据,要求:
ID字段取值自transord.nr,需通过consignment关联到order表,并过滤出order.frachtagnr = 2418850的记录- 仅插入
transord.nr尚未在atransportordercustomfieldv表中存在的条目 CFBOOLEAN2字段固定设为0
原脚本因嵌套冗余、子查询返回多行时会触发语法错误,无法正常执行,以下是优化后的实现方案。
优化后的SQL脚本
INSERT INTO atransportordercustomfieldv (ID, CFBOOLEAN2) SELECT transord.nr, 0 FROM transord LEFT JOIN consignment ON consignment.ASENDUNGID = transord.sendungid LEFT JOIN `order` ON consignment.akopfnr = `order`.nr WHERE `order`.frachtagnr = 2418850 -- 过滤掉已存在于目标表的记录 AND NOT EXISTS ( SELECT 1 FROM atransportordercustomfieldv af WHERE af.ID = transord.nr );
核心优化点
- 简化关联逻辑:直接通过
JOIN串联所有依赖表,避免重复嵌套查询,可读性更强 - 替换
NOT IN为NOT EXISTS:NOT IN在子查询返回NULL时会导致结果异常,NOT EXISTS逻辑更稳定可靠 - 处理关键字冲突:
order是SQL保留关键字,用反引号(`)包裹避免语法报错 - 批量插入逻辑:
SELECT语句直接返回所有符合条件的transord.nr,配合固定值0,一次性完成批量插入
内容的提问来源于stack exchange,提问作者georgiev
相关产品推荐
相关产品推荐

