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),比较适用此方案. [解决方案] ...
随机推荐
- ZYNQ国产化替代-FMQL100TAI 核心板
概述 FMQL100TAI 核心板基于复旦微的PSOC 架构处理器,型号为FMQL100TAI9000, 板卡 100%采用国产芯片设计,板卡质量等级分为国产 I 级和国产 J 级.具备强大的运算能 ...
- 微信小程序-敏感内容检测 文本过滤 图片检测 https
一.获取access_token wx.request({ url: 'https://api.weixin.qq.com/cgi-bin/token', method : 'GET', data : ...
- 在TCP四次挥手中,为什么客户端发送FIN后,还可以发送报文
在TCP四次挥手中,为什么客户端发送FIN后,还可以发送报文 首先回顾下四次挥手的过程. 第一次挥手:客户端停止发送数据,主动关闭 TCP 连接,处于FIN_WAIT1状态,等待服务端确认. 第二次挥 ...
- VBA常用的函数
space(8)加空格 vbcrlf换行 trim()去掉两侧空格 lrim()去掉左侧空格 rtrim()去掉右侧空格 left()取字符的左侧 right()取字符串的右侧开始 mid()取字符串 ...
- [ARC158D] Equation
Problem Statement You are given a positive integer $n$, and a prime number $p$ at least $5$. Find a ...
- IDEA在new对象的时候不显示其parameter
问题现象 最近安装了一个IDEA2023.1版本,出现了new对象不显示相关构造参数 解决办法 在IDEA的设置中开启相关提示 勾选上面的几个设置,保存 效果
- 牛客小白月赛2 E题 是是非非 (尼姆博弈)
题目链接:https://www.nowcoder.com/acm/contest/86/E 解题思路:由尼姆博弈我们可以知道,如果所有堆的石子数量异或为0,那么先手必败,否则先手必胜. 由异或我们可 ...
- cgroup的入门资料
近期在准备特性的设计文档,按照评审专家的建议,需要排查现有产品中算力资源比如CPU.内存的分配方案,确认现有的硬件款型是否具备充足的资源来启用本特性. 依据前辈提供的建议,检查了产品的部署脚本,发现当 ...
- 文心一言 VS 讯飞星火 VS chatgpt (31)-- 算法导论5.2 3题
三.利用指示器随机变量来计算掷n 个骰子之和的期望值. 文心一言: 为了计算掷n个骰子之和的期望值,我们需要先了解一个重要的概念:指示器随机变量. 指示器随机变量是一种特殊的随机变量,它只有两个取值: ...
- video标签视频指定帧作为预览图
<video :src="videoUrl" :poster=" videoUrl + '?x-oss-process=video/snapshot,t_0,f_j ...