结合是指一次查询时从两个以上的表里取数据。一般分为内部结合和外部结合两种,我们来SAP培训一下,先看看下面两个例子:
1,内部结合
SELECT T1~EBELN
T1~BSART
T2~EBELP
T3~EINDT
FROM EKKO AS T1
INTO TABLE IT_DT200
INNER JOIN EKPO AS T2 ON T1~EBELN = T2~EBELN
INNER JOIN EKET AS T3 ON T2~EBELN = T3~EBELN
AND T2~EBELP = T3~EBELP
WHERE T1~BUKRS = ZXXM_D103_S01-BUKRS
AND T1~EBELN IN R_EBELN
AND T1~LOEKZ = SPACE
AND T3~EINDT IN R_EINDT.
上面就是一个内部结合的例子。他是从表EKPO和表EKET里取数据,有几点要注意一下:
a,字段名一定是以XX~替代表名,比如EKKO~。
b,AS表示表的替代名,这里用的T1替代EKKO。
c,INNER JOIN ON表示表内部结合,这种语法表示两个表都必须有符合的数据才会被取出
d,R_EBELN表示RANGE表,有关RANGE表可参看RANDG表
2,外部结合
SELECT T1~GJAHR
T1~BELNR
T1~BUZEI
T1~SAMPL
T2~LGORT
T2~SAMPL AS SAMPL2
FROM EKBE AS T1
INTO TABLE IT_EKBE
LEFT JOIN MSEG AS T2 ON T1~GJAHR = T2~MJAHR
AND T1~BELNR = T2~MBLNR
WHERE T1~EBELN = WA_DT200-EBELN
AND T1~EBELP = WA_DT200-EBELP
AND T1~VGABE = C_TYPE_N.
上面是一个外部结合的例子。表示从表EKBE和表MSEG内抽出数据,注意点有下面几个
a,如果两个表里有相同的字段且都被抽出的话,可以用AS取别名,如上面AS SAMPL2
b,LEFT JOIN ON表示外部结合,它表示只要主表一边有的话,就可以取出来,比如上面,如果表EKBE里有EBELP,哪怕MSEG里没有,也会被抽出来。
c,取不到数据的场合,用空白填充
以上就是SAP里的SQL结合用法,更多SQL用法请参看ABAP的SQL查询语句之一般用法