首页 > 其他分享 >LEFT JOIN和INNER JOIN 以及 FOR ALL ENTRIES IN

LEFT JOIN和INNER JOIN 以及 FOR ALL ENTRIES IN

时间:2024-11-07 14:48:04浏览次数:3  
标签:GT JOIN 数据表 INNER ENTRIES id LEFT

【在写开发报表的时候,遇到多表取数,重温数据库里面的集中多表取数的方法。】
        在ABAP开发中,JOIN、LEFT JOIN、INNER JOIN以及FOR ALL ENTRIES IN是用于将两个或多个表中的数据结合起来的不同方法。以下是它们之间的主要区别和使用方法:

  • JOIN:

JOIN是一个通用的术语,用于描述连接操作。在ABAP中,JOIN通常指的是INNER JOIN。

*假设有两个表A和B,A表有列id和name,B表有列id和value。
SELECT a~id, a~name, b~value
FROM A AS a
JOIN B AS b ON a~id = b~id.
  • LEFT JOIN(或LEFT OUTER JOIN)

LEFT JOIN返回左表中的所有行,即使在右表中没有匹配的行。如果右表中没有匹配的行,那么结果中的右表列将包含NULL值。

SELECT a~id, a~name, b~value
FROM A AS a
LEFT JOIN B AS b ON a~id = b~id.
*如果里面有字段值为空的数据 也能查询出来
  • INNER JOIN:

INNER JOIN只返回两个表中匹配的行。如果某个表中的行在另一个表中没有匹配的行,那么这些行将不会出现在结果中。

SELECT a~id, a~name, b~value
FROM A AS a
INNER JOIN B AS b ON a~id = b~id.
*如果表中有id为空的数据就不会被一起取出来
  • FOR ALL ENTRIES IN:

FOR ALL ENTRIES IN是SAP ABAP中的一种特殊连接操作,用于将一个表与另一个表中的多个行进行连接,FOR ALL ENTRIES IN 是一种特殊的循环结构,用于优化对内表的查询。它通常用于将一个主数据表与一个或多个从数据表进行连接,这种循环结构会为主表的每一行创建一个查询,并将这些查询合并成一个单一的数据库请求,这样可以显著提高性能。

DATA: GT_OUT TYPE TABLE OF ZTABLE_OUT, " 假设这是主数据表
      GT_DETAIL TYPE TABLE OF ZTABLE_DETAIL. " 假设这是从数据表

" 假设 GT_OUT 已经被填充了数据

SELECT * FROM ZTABLE_DETAIL " 从数据表
  FOR ALL ENTRIES IN @GT_OUT " 对于 GT_OUT 中的每一行
  WHERE KEY_FIELD = GT_OUT-KEY_FIELD. " 根据主数据表中的 KEY_FIELD 字段进行查询
  INTO TABLE @GT_DETAIL
" 结果会被存储在 GT_DETAIL 中

使用 FOR ALL ENTRIES IN 时,需要注意以下几点:

  1. FOR ALL ENTRIES IN 只能用于内表(内部表),不能用于数据库表。
  2. 查询条件必须引用 FOR ALL ENTRIES IN 后面指定的内表的字段。
  3. 如果主数据表中的行数非常多,可能会导致性能问题,因为每个行都会生成一个查询。
  4. FOR ALL ENTRIES IN 中的查询条件应该是高效的,以避免性能瓶颈。

          JOIN、LEFT JOIN和INNER JOIN是SQL标准中的连接操作,而FOR ALL ENTRIES IN是SAP ABAP中的一种特殊连接操作,用于处理SAP特定的数据模型。

标签:GT,JOIN,数据表,INNER,ENTRIES,id,LEFT
From: https://blog.csdn.net/qq_55841727/article/details/143562649

相关文章

  • paddleSOT beginner
    paddleSOTbeginner入门学习一个例子说明什么是动转静示例:在动态图和静态图中的简单计算假设我们有一个简单的神经网络模型,每次输入一个张量x,然后做一些数学运算并输出结果。这个过程使用PaddlePaddle框架中的动转静技术可以分为两个部分来说明。1.动态图实现在动态图模......
  • AtCoder Beginner Contest 284题解
    AtCoderBeginnerContest284A没有什么难点,反着输出一遍就可以了。#include<bits/stdc++.h>usingnamespacestd;stringa[2000];intmain(){ intn; cin>>n; for(inti=1;i<=n;i++)cin>>a[i]; for(inti=n;i;i--)cout<<a[i]<<'\n';......
  • AtCoder Beginner Contest 378
    ContestLink还得加练。A&B&C&D不具备任何思维含量。SubmissionASubmissionBSubmissionCSubmissionDE注意到它计算答案的式子,每个子区间和都需要取模,否则就是沙币题了,可以对于每个位置\(O(1)\)地统计答案扫过去然后\(\bmodM\)。常规地,记\(S_i=\sum......
  • AtCoder Beginner Contest 360 - VP记录
    A-AHealthyBreakfast高桥日常出境。头一次知道getchar()的返回值是int。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ chars[3]={getchar(),getchar(),getchar()}; if(s[0]=='R'&&s[1]=='M')puts("Yes"); els......
  • AtCoder Beginner Contest 378 E
    https://atcoder.jp/contests/abc378/tasks/abc378_ehttps://atcoder.jp/contests/abc378/editorial/11300#include<bits/stdc++.h>#definexfirst#defineysecond#defineall(x)(x).begin(),(x).end()#definelowbit(x)(x)&-(x)usingnamespacestd;ty......
  • 第三十四讲:join语句怎么优化?
    第三十四讲:join语句怎么优化?简概:万年不变的开头​ 在上一篇文章中,我和你介绍了join语句的两种算法,分别是IndexNested-LoopJoin(NLJ)和BlockNested-LoopJoin(BNL)。我们发现在使用NLJ算法的时候,其实效果还是不错的,比通过应用层拆分成多个语句然后再拼接查询结果更方......
  • left join 出现重复on导致sql语句报错
    leftjoin出现重复on导致sql语句报错​mybatis-plus开启多租户插件功能时,在进行链表查询时会重复出现on导致sql语句报错原因​原因是引入的分页拆件中的jsqlparser解析器和mybatis-plus的jsqlparser解析器冲突了,导致默认采用了分页拆件的jsqlparser解析器​分页拆件......
  • 第三十三讲:到底可不可以使用join?
    第三十三讲:到底可不可以使用join?简概:厌烦了平淡的开头提出问题​ 在实际生产中,关于join语句使用的问题,一般会集中在以下两类:我们DBA不让使用join,使用join有什么问题呢?如果有两个大小不同的表做join,应该用哪个表做驱动表呢?提出示例​ 今天这篇文章,我就先跟你说......
  • AtCoder Beginner Contest 378
    AtCoderBeginnerContest378总结A直接模拟,存\(1\)到\(4\)出现个数。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map&g......
  • uniapp使用uni.createInnerAudioContext()播放指定音频并且切换
    uniapp使用uni.createInnerAudioContext()播放指定音频并且切换因为做的小程序或者h5需要视频讲解或者音乐组件的默认展示播放按钮,当点击播放的时候显示暂停音乐这样的一个效果。在unipp中我们直接只用uni.createInnerAudioContext()代替audio,使用更加方便,更加简洁,unia......