https://www.cnblogs.com/jiangzhengjun/p/4264698.html#_Toc410466920
SELECT SINGLE … INTO…WHERE/
ON 后面的条件与WHERE条件类似,但是有以下不同
1.必需有ON条件语句,且多个条件之间只能使用AND连接
2.在每个条件表达式中,两个操作数之中必需有一个字段是来自于JOIN右表
3.如果是LEFT OUTER JOIN,则至少有一个条件表达式的两个操作数一个是来自于左表,一个时来自于右边
4.不能使用NOT,LIKE,IN(但如果是INNER JOIN,则> , < , BETWEEN … AND , <> 都可以使用)
5.如果是LEFT OUTER JOIN ,则只能使用等号操作符:( = , EQ)
6.如果是LEFT OUTER JOIN ,同一右表不能多次出现在不同的LEFT OUTER JOIN的 ON条件表达式中
7. LEFT OUTER JOIN 的右表所有字段不能出现在WHERE中
8. 如果是LEFT OUTER JOIN, 则在同一个ON 条件语句中,只能与同一个左表进行关联。
*销售订单数据
SELECT vbeln,bstnk,kunnr,kvgr2 (vbeln为销售订单号,bstnk为客户参考号,kunnr为客户代号,kvgr2为品牌)
FROM vbak
FOR ALL ENTRIES IN @gt_so_inf
WHERE vbeln = @gt_so_inf_vbeln
INTO TABLE @DATA(lt_vbak).
SORT lt_vbak BY vbeln.
其中sort为排序的意思,以为lt_vak以vbeln为标准进行默认升序排序
For all entries in什么时候使用?
答:
1.对于不能join的表,使用for all entries in语句将数据库表域内表串联
for all entries in 类似于外连接的时候,为避免多次重复数据库查询,用内表的某一字段为条件,从数据库表中取得数据,
有一样的则选出,相当于过滤数据的作用
2.检查内表是否为空,如果为空,将取得全部数据
3.不能使用LIKE,BETWEEN 和IN(因为这些操作符都是不确定比较操作符(将选择条件设定在一个范围内))
FOR ALL ENTRIES IN 语句的作用相当于将选择条件块全部并列开来。
ABAP中FOR ALL ENTRIES IN 的使用指南
在ABAP开发中,对于不能使用join的聚集表或者需要使用SELECT的内表,我们一般使用for all entries in 语句将该表与内表串联,查询出需要的数据,例如;以BSEG聚集表为例,如下:
SELECT bseg~kunnr bseg~lifnr bseg~belnr INTO TABLE itab_bseg FROM bseg FOR ALL ENTRIES IN itab_main
WHERE bukrs in_bukrs and (belnr = itab_main-belnr AND hkont = itab_main-hkont).
由于BSEG不能和BSIS做inner join所以先将BSIS内容放到itab_main中,然后用FOR ALL ENTRIES IN 来串联
1.SELECT语句
INTO语句的结果不是保存到内表,是字段或者结构体的时候,最后要加ENDSELECT语句,这种语句相当于LOOP循环中执行SELECT语句,每取出一条数据,就把它追加到结构体中,一直读取全部符合条件的数据为止。
*-------------使用结构体
*使用的结构体,因此使用SELECT ENDSELECT 语句
DATA: gs_zht6 TYPE STANDRAD TABLE OF ZHR_TRAIN_ZHT_1,
gs_zht7 TYPE ZHR_TRAIN_ZHT_1.
SELECT * INTO gs_zht7 FROM ZHR_TRAIN_ZHT_1
WHERE name EQ '周0'
WRITE : /gs_zht7-sex,
/gs_zht7-te1.
ENDSELECT.
*-------------使用内表
*使用了内表一次性保存所有的值,因此不存在ENDSELECT.
DATA: gs_zht9 TYPE STANDARD TABLE OF ZHR_TRAIN_ZHT_1,
gs_zht8 TYPE ZHR_TRAIN_ZHT_1.
SELECT * INTO TABLE gs_zht9 FROM ZHR_TRAIN_ZHT_1
WHERE name EQ '周0'.
LOOP AT gs_zht9 INTO gs_zht8.
WRITE: /gs_zht8-tel,
/gs_zht8-sex.
ENDLOOP.