SAP-ABAP:多表关联查询入门——INNER JOIN/LEFT JOIN等关联方式的适用场景辨析

发布时间:2026/11/8 18:56:39

SAP-ABAP:多表关联查询入门——INNER JOIN/LEFT JOIN等关联方式的适用场景辨析 ABAP核心进阶篇120篇SELECT查询语法优化12篇第三篇多表关联查询入门——INNER JOIN/LEFT JOIN等关联方式的适用场景辨析博客标题《多表关联查询入门INNER JOIN/LEFT JOIN等关联方式的适用场景辨析》博客简介讲解多表关联的核心逻辑逐一拆解内连接、左外连接、右外连接、全连接的语法规则与结果差异结合采购订单头行关联EKKO/EKPO、物料凭证关联MKPF/MSEG等经典业务场景给出选型标准避免关联方式选择错误导致的数据遗漏或冗余问题。 写在前面在实际业务中几乎所有有意义的报表都涉及多张数据库表的联合查询。理解各种 JOIN 的差异能让我们写出既准确又高效的查询语句。多表关联查询INNER JOIN只返回匹配行LEFT JOIN保留左表全部行RIGHT JOIN保留右表全部行FULL OUTER JOIN保留两表全部行EKKO↔EKPO订单必须要有行项目KNA1↔VBAK客户可能没有订单极少使用通常可转为LEFT JOIN数据完整性检查两表数据全面对比通过本文的学习你将掌握四种 JOIN 类型的语法规则与执行逻辑每种 JOIN 的结果差异与性能特点EKKO/EKPO、MKPF/MSEG、MARA/MAKT 等经典业务场景的关联选型关联方式的选型决策模型常见错误笛卡尔积、关联类型错误的规避方法一、多表关联核心逻辑 1.1 什么是多表关联多表关联是通过两个或多个表之间的共同字段将来自不同表的数据组合成一张逻辑大表的查询方式。概念说明示例关联字段用于匹配两个表的共同字段ekko~ebeln ekpo~ebeln关联条件指定如何匹配的表达式ON e~ebeln p~ebeln关联类型决定不匹配数据的处理方式INNER / LEFT / RIGHT / FULL 1.2 关联条件的基本规则必须使用ON子句明确关联条件不再推荐将关联条件写在WHERE中。关联字段的数据类型必须一致否则数据库无法利用索引。多表 JOIN 时优先关联数据量小的表作为驱动表。 标准写法 SELECT e~ebeln, p~posnr FROM ekko AS e INNER JOIN ekpo AS p ON e~ebeln p~ebeln ON 中写关联条件 WHERE e~erdat 20230101 WHERE 中写过滤条件 INTO TABLE DATA(lt_result). 1.3 关于FOR ALL ENTRIESFOR ALL ENTRIES虽然也能实现“跨表查询”的效果但它本质上是循环驱动的批量 SELECT不是真正的 JOIN。性能通常不如直接使用 JOIN且在驱动内表为空时会导致全表查询需用IF itab IS NOT INITIAL.包裹。现代 ABAP 开发中能用 JOIN 的场景优先使用 JOIN。二、INNER JOIN 内连接 2.1 语法与执行逻辑SELECT 字段 FROM 左表 AS 别名 INNER JOIN 右表 AS 别名 ON 关联条件 INTO TABLE DATA(lt_result).结果仅返回两个表都能匹配上的行。EKPOEKKO450001450002450001450003无匹配丢弃无匹配丢弃适用场景采购订单头行项目EKKO↔EKPO、物料凭证头行项目MKPF↔MSEG。SELECT e~ebeln, e~erdat, p~posnr, p~matnr, p~menge, p~netwr FROM ekko AS e INNER JOIN ekpo AS p ON e~ebeln p~ebeln INTO TABLE DATA(lt_po) WHERE e~erdat BETWEEN 20230101 AND 20231231 UP TO 100 ROWS.三、LEFT JOIN 左外连接 3.1 语法与执行逻辑SELECT 字段 FROM 左表 AS 别名 LEFT JOIN 右表 AS 别名 ON 关联条件 INTO TABLE DATA(lt_result).结果左表全部行都会被保留右表无匹配的字段填充 NULL。VBAKKNA1客户A客户B客户A的订单右表无匹配vbeln NULL适用场景客户订单KNA1↔VBAK、物料描述MARA↔MAKT、供应商采购记录LFA1↔EKKO。SELECT k~kunnr, k~name1, v~vbeln, v~netwr FROM kna1 AS k LEFT JOIN vbak AS v ON k~kunnr v~kunnr INTO TABLE DATA(lt_customer) WHERE k~land1 CN UP TO 100 ROWS.四、RIGHT JOIN 右外连接 4.1 语法与执行逻辑SELECT 字段 FROM 左表 AS 别名 RIGHT JOIN 右表 AS 别名 ON 关联条件 INTO TABLE DATA(lt_result).结果右表全部行都会被保留左表无匹配的字段填充 NULL。实践建议RIGHT JOIN在 ABAP 中使用极少多数场景可通过交换左右表位置改为LEFT JOIN可读性更好。五、FULL OUTER JOIN 全连接 5.1 语法与执行逻辑SELECT 字段 FROM 左表 AS 别名 FULL OUTER JOIN 右表 AS 别名 ON 关联条件 INTO TABLE DATA(lt_result).结果两表所有行均保留无匹配的一侧填充 NULL。适用场景数据完整性检查——例如找出所有订单头中无行项目的或行项目中无订单头的。注意FULL OUTER JOIN性能最差仅建议在数据量较小的完整性验证场景中使用。六、四种关联方式对比关联方式左表无匹配右表无匹配性能典型场景INNER JOIN丢弃丢弃★★★★★EKKO↔EKPOLEFT JOIN保留丢弃★★★★☆KNA1↔VBAKRIGHT JOIN丢弃保留★★★★☆极少使用FULL OUTER JOIN保留保留★★☆☆☆完整性检查七、经典业务场景关联示例已补全参考字段 7.1 EKKO↔EKPO↔LFA1 三层关联SELECT e~ebeln, e~erdat, e~lifnr, l~name1, p~posnr, p~matnr, p~menge, p~meins, p~netwr, e~waers FROM ekko AS e INNER JOIN ekpo AS p ON e~ebeln p~ebeln LEFT JOIN lfa1 AS l ON e~lifnr l~lifnr INTO TABLE DATA(lt_po) WHERE e~erdat BETWEEN 20230101 AND 20231231 UP TO 200 ROWS.ALV提示金额字段NETWR需设cfieldname WAERS数量字段MENGE需设qfieldname MEINS。 7.2 MKPF↔MSEG 物料凭证关联SELECT m~mblnr, m~mjahr, m~budat, s~bwart, s~matnr, s~menge, s~meins, s~werks, s~lgort FROM mkpf AS m INNER JOIN mseg AS s ON m~mblnr s~mblnr AND m~mjahr s~mjahr INTO TABLE DATA(lt_mm) WHERE m~budat BETWEEN 20230101 AND 20231231 UP TO 200 ROWS. 7.3 MARA↔MAKT 物料描述左连接SELECT m~matnr, m~mtart, m~meins, t~maktx FROM mara AS m LEFT JOIN makt AS t ON m~matnr t~matnr AND t~spras sy-langu INTO TABLE DATA(lt_material) WHERE m~mtart IN (FERT, HALB) UP TO 200 ROWS. 7.4 VBAK↔VBAP↔VBEP 三级关联SELECT h~vbeln, h~erdat, h~auart, i~posnr, i~matnr, i~kwmeng, s~etdat, s~fmeng FROM vbak AS h INNER JOIN vbap AS i ON h~vbeln i~vbeln LEFT JOIN vbep AS s ON i~vbeln s~vbeln AND i~posnr s~posnr INTO TABLE DATA(lt_sales) WHERE h~erdat BETWEEN 20230101 AND 20231231 UP TO 200 ROWS.八、关联方式选型决策是否是否是否开始选型左表数据必须全部保留LEFT JOIN右表数据必须全部保留RIGHT JOIN或交换表用LEFT两表数据都需要全部保留FULL OUTER JOININNER JOIN九、常见错误与规避#错误后果正确做法1遗漏 ON 条件笛卡尔积数据量爆炸每个 JOIN 必须带ON2用 INNER JOIN 查客户订单无订单的客户被遗漏改用LEFT JOIN3关联字段类型不一致索引失效性能差确保字段数据类型匹配4先 JOIN 大表再 JOIN 小表中间结果集过大优先 JOIN 小表作为驱动5在关联字段上使用函数索引失效避免UPPER(l~name1)等写法6FOR ALL ENTRIES驱动表为空返回全表数据用IF itab IS NOT INITIAL.保护十、总结多表关联INNER两表匹配LEFT左表全保留RIGHT右表全保留FULL两表全保留✅ 最常用性能最优极少用可转LEFT仅用于数据检查核心要点INNER JOIN只返回匹配数据适用于强关联的主从表场景性能最佳LEFT JOIN保留左表全部数据适用于“主数据可选明细”的场景RIGHT JOIN很少使用通常可通过交换表位置转为 LEFT JOINFULL OUTER JOIN适用于数据完整性检查性能最差应控制数据量关联条件必须使用ON子句字段类型要匹配驱动表尽量选小表能用 JOIN 解决的场景优先使用 JOIN 而非FOR ALL ENTRIES下一篇预告《SELECT复杂查询实战聚合函数、子查询与GROUP BY/HAVING组合用法》作者爱喝水的鱼丶版本记录2026年7月验证基准SAP NetWeaver 7.51 你在多表关联查询中踩过哪些坑欢迎留言交流
延伸阅读

更多相关文章

2026/11/8 18:56:38

每日一Go-83、Cobra 使用实战:10 分钟打造专业级 CLI 工具

工程里 80% 的自动化,都可以用一个 CLI 工具解决。而 Go 生态里,Cobra 几乎是事实标准。 今天这篇「每日一 Go」,我们不讲概念、不背 API,只讲实战:从 0 到 1,手把手带你用 Cobra 打造一个生产可用的命令行…

2026/11/6 0:44:45

基于SpringBoot的医疗管理系统设计

摘 要 当前医疗领域面临信息化转型压力,传统管理模式中数据分散、流程冗繁以及资源错配等问题日益严重,导致诊疗效率难以满足患者增长的需求。为了打破数据孤岛并优化就医流程,开发一套集成化、智能化的医疗管理系统显得尤为紧迫。该系统旨…

2026/11/7 7:03:46

如何本地安装Alibaba Cloud Linux

一、为何需要本地安装Alibaba Cloud Linux? 据说:CentOS 官网正式宣布,将停止维护 CentOS Linux,并将更多资金和人力投入到 CentOS Stream 中。CentOS Linux 8 将在 2021 年底停止维护,CentOS Linux 7 将在 2024 年 6…

2026/11/8 18:51:52

工地太忙根本没时间复习考试?电工证年审农科院值不值得考?

工地太忙根本没时间复习考试?电工证年审农科院值不值得考? 工地太忙根本没时间复习考试,这话听着像老生常谈,但偏偏是很多电工兄弟的真实写照。特别是那些在河南水利工程一线打拼的师傅们,整天泡在工地上,连吃饭都得赶时间,更别说抽空去复习电工证年审…

2026/11/8 18:51:52

低压值班电工证保姆级教程:怕考不过白交培训费?这份教程帮你稳过

低压值班电工证保姆级教程:怕考不过白交培训费?这份教程帮你稳过 怕考不过白交培训费?低压值班电工证的考试真的很难吗?其实很多人考不过不是因为题目太难,而是方法不对。这份保姆级教程就是为了解决你备考过程中的各种问题,从报名到考试再到复审,一步…

2026/11/8 18:51:52

海珠高级电工证难不难 内部消息告诉你实操考试怎么稳过

海珠高级电工证难不难 内部消息告诉你实操考试怎么稳过 实操考试心里没底怕挂科?别慌! 海珠高级电工证难不难 ,这个问题几乎成了所有想考电工证的新手心头的疙瘩。其实,只要你掌握正确的方法和流程,通过并不难。特别是现在有 内部消息…

2026/11/8 18:46:52

哪些机构可以考电工证到期换证流程多少钱

哪些机构可以考电工证到期换证流程多少钱 之前考的证在外省能不能转过来?这个问题,我猜你也问过,特别是在外省考的电工证,回老家工作又想用,换证流程到底怎么走, 多少钱…

2026/11/8 0:00:27

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/8 0:00:27

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑