当前位置: 首页 > article >正文

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.
"--------------------@斌将军--------------------

 结果:


http://www.kler.cn/a/6720.html

相关文章:

  • UniApp的Vue3版本中H5配置代理的最佳方法
  • Dart:字符串
  • Vue3 虚拟列表组件库 virtual-list-vue3 的使用
  • Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义
  • Leetcode 回文数
  • 109. UE5 GAS RPG 实现检查点的存档功能
  • 2023年最全前端React18面试题考点
  • 第4章 封装组件中级篇
  • Vue项目笔记
  • 如何防止服务器数据轻易泄露
  • React+Typescript+Electron 开发跨平台桌面应用教程
  • HarmonyOS/OpenHarmony应用开发-Stage模型ArkTS语言AbilityConstant
  • 保姆式教学-实现天空盒旋转
  • ShellBrowser .NET Components released
  • 【数据结构】七种常见的排序
  • 【Redis学习】Redis管道
  • Leetcode.112 路径总和
  • 什么是编码和解码
  • GC 日志
  • 【面试】MySQL面试题
  • 分布式事务·入门与解决·壹
  • 【UML建模】用例图(Use Case Diagram)
  • CUDA编程(二):核函数与线程层级
  • 【AUTOSAR】【Lin通信】LinIf
  • 【OpenCV-Python】cvui 之 复选框
  • 浪潮信息:2025年,实现数据中心风冷、液冷同价