FOR ALL ENTRIES IN 与 INNER JOIN 内表
1、区别
FOR ALL ENTRIES IN 与 INNER JOIN 内表,目的都是通过内表找数据库表与之对应的数据,但是有区别。
1.1、写法
FOR ALL ENTRIES IN
"--------------------@斌将军--------------------
IF gt_acd IS NOT INITIAL.
SELECT
acdoca~rldnr,"总账会计中的分类账
acdoca~rbukrs,"公司代码
acdoca~gjahr,"会计年度
acdoca~belnr,"会计凭证号码
acdoca~docln"分类账 6 字符过账项目
FROM acdoca
FOR ALL ENTRIES IN @gt_acd
WHERE acdoca~gjahr = @gt_acd-gjahr AND acdoca~docln = @gt_acd-docln
INTO TABLE @DATA(lt_data2).
ENDIF.
"--------------------@斌将军--------------------
INNER JOIN 内表
"--------------------@斌将军--------------------
SELECT
acdoca~rldnr,"总账会计中的分类账
acdoca~rbukrs,"公司代码
acdoca~gjahr,"会计年度
acdoca~belnr,"会计凭证号码
acdoca~docln"分类账 6 字符过账项目
FROM acdoca
INNER JOIN @gt_acd AS acd ON acdoca~gjahr = acd~gjahr AND acdoca~docln = acd~docln
INTO TABLE @DATA(lt_data)."赋值放在最后一行
"--------------------@斌将军--------------------
1.2、用法
FOR ALL ENTRIES IN:不能使用聚合函数;关联字段的类型和长度必须一致;内表为空,则全表查询;
INNER JOIN:可以使用聚合函数;关联的字段类型长度可以不一致;内表为空,查询无果;
1.3、去重
现有数据如下:

查询内表:
内表为两条相同的物料号,作为查询条件
"--------------------@斌将军--------------------
ls_marc-matnr = '000000000000001000'.
APPEND ls_marc TO lt_marc.
ls_marc-matnr = '000000000000001000'.
APPEND ls_marc TO lt_marc.
"--------------------@斌将军--------------------
FOR ALL ENTRIES IN:会根据查询的字段,将最终结果去重

INNER JOIN 内表:相同的查询条件,会将数据全部查出

所以使用INNER JOIN 内表需要做去重,可以通过两种办法:
去重方法一:DISTINCT查询去重
在去重方面,FOR ALL ENTRIES IN 等价于 INNER JOIN 内表+DISTINCT,当查询的字段不是所有关键字时,会出现数据丢失的情况

去重方法二:查询条件去重再查询
去掉重复的查询条件,然后再查询数据库表
"--------------------@斌将军--------------------
SORT lt_marc BY matnr.
DELETE ADJACENT DUPLICATES FROM lt_marc COMPARING matnr.
"--------------------@斌将军--------------------
结果不重复
且查询的字段不是所有关键字时,数据仍然不会丢失

1.4、效率
用4万行数据的内表,作为查询条件,测试新老语法,并使用唯一键的排序表与新语法相结合
"--------------------@斌将军--------------------
TYPES:BEGIN OF ty_acd,
gjahr TYPE acdoca-gjahr,
docln TYPE acdoca-docln,
rbukrs TYPE acdoca-rbukrs,
END OF ty_acd. DATA:lt_acd_sort TYPE SORTED TABLE OF ty_acd WITH UNIQUE KEY gjahr docln. ... GET TIME STAMP FIELD lv_current1.
MOVE-CORRESPONDING gt_acd TO lt_acd_sort.
SELECT
acdoca~rldnr,"总账会计中的分类账
acdoca~rbukrs,"公司代码
acdoca~gjahr,"会计年度
acdoca~belnr,"会计凭证号码
acdoca~docln"分类账 6 字符过账项目
FROM acdoca
INNER JOIN @lt_acd_sort AS acd ON acdoca~gjahr = acd~gjahr AND acdoca~docln = acd~docln
INTO TABLE @DATA(lt_data4).
GET TIME STAMP FIELD lv_current2.
"--------------------@斌将军--------------------
结果:

定期更文,欢迎关注

FOR ALL ENTRIES IN 与 INNER JOIN 内表的更多相关文章
- FOR ALL ENTRIES IN 与 INNER JOIN 写在一个SQL上影响效率
SELECT likp~vbeln likp~lfart lips~werks likp~kunnr INTO CORRESPONDING FIELDS OF TABLE it_likps FROM ...
- SAP内表查询速度优化实例-OPEN SQL
一.FOR ALL ENTRIES IN 案例 今天碰到工单报工统计分析表查询速度特别慢 经查看源代码: SELECT afpo~dwerk afko~aufnr afpo~matnr AS plnb ...
- JOIN关联表中ON,WHERE后面跟条件的区别
select * from td left join (select case_id as sup_case_id , count(*) supervise_number from td_kcdc ...
- SAP ABAP将大数据量排序后输入到内表
要向内表读入3百50万条数据,如果一次读入就会产生运行错误,错误提示为,没有内存对于扩展 内表. 我考虑使用SELECT...INTO TABLE...PACKAGE SIZE 和ENDSELECT来 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)
*********************************************************************** * Title : ZSDF003 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW
*********************************************************************** * Title : ZSDF002 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里
需要传入数据到Excel里的模板如上图所示 ********************** * 设计主要逻辑与原理说明 ...
- ABAP 内表的行列转换-发货通知单2
*&---------------------------------------------------------------------* *& Report Z_TEST_C ...
- ABAP 内表的行列转换-发货通知单-SLIS
REPORT Z_TEST_COL_TO_ROW. TYPE-POOLS: slis. TABLES: VTTP,LIPS,LIKP,KNA1 ,VTTK. DATA: gd_fieldcat TYP ...
- 【Spark调优】小表join大表数据倾斜解决方案
[使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...
随机推荐
- 一种全新的日志异常检测评估框架:LightAD
本文分享自华为云社区<[AIOps]一种全新的日志异常检测评估框架:LightAD,相关成果已被软工顶会ICSE 2024录用>,作者: DevAI. 深度学习(DL)虽然在日志异常检测中 ...
- [PostgreSQL]在group by查询下拼接列字符串
首先创建group_concat聚集函数: CREATE AGGREGATE group_concat(anyelement) ( sfunc = array_append, -- 每行的操作函数,将 ...
- 你知道Spring中BeanFactoryPostProcessors是如何执行的吗?
Spring中的BeanFactoryPostProcessor是在Spring容器实例化Bean之后,初始化之前执行的一个扩展机制.它允许开发者在Bean的实例化和初始化之前对BeanDefinit ...
- 开发环境搭建:CubeMX、Keil MDK-ARM、仿真器驱动程序
来源:成电<微机原理与嵌入式系统>漆强 第三章 STM32微控制器开发环境的搭建 一.STM32 CubeMX的安装 1.STM32 CubeMX的下载和安装 先安装java环境安装 下载 ...
- 【UniApp】-uni-app-pinia存储数据
前言 经过上个章节的介绍,大家可以了解到 uni-app-数据缓存 的基本使用方法 那本章节来给大家介绍一下 uni-app-pinia存储数据 的基本使用方法 经过我这么多篇章的介绍,我发现大家环境 ...
- JXNU acm选拔赛 涛涛的Party
涛涛的Party Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Subm ...
- Oracle表空间和数据文件
表空间:tablespace 表空间就是:存放数据库表.索引.等等对象的逻辑空间. oracle数据在安装并创建实例后,默认会自动创建多个表空间. ORACL默认表空间 SYSTEM表空间 存放ora ...
- 数字孪生为何通过融合GIS系统能够更好地助力智慧城市发展?
随着城市化进程的不断加速,智慧城市建设已成为许多城市发展的重要方向.在智慧城市中,数字孪生技术和GIS系统的融合,为城市发展带来了全新的可能性和机遇.数字孪生是一种将物理世界和数字世界相结合的技术,通 ...
- 从零玩转设计模式之原型模式-yuanxingmoshi
title: 从零玩转设计模式之原型模式 date: 2022-12-11 20:05:35.488 updated: 2022-12-23 15:35:44.159 url: https://www ...
- MySQL运维实战(1.3)安装部署:源码编译安装
作者:俊达 引言 在大多数情况下,我们不需要自己编译MySQL源码,因为编译的MySQL和二进制包的内容基本一致.然而,有些特殊情况可能需要我们采用源码编译的方式安装MySQL: 安装非标准版本的My ...