ABAPのオープンSQL―SELECT文で外部結合を行うテクニックについて解説します。

そもそもテーブル結合って何?
外部結合って?内部結合とは何が違うの?
以上のような疑問にお答えします。
ABAPerであれば知らないと恥ずかしい基本知識です。是非最後までご覧ください。
前提:テーブル結合とは?
テーブル結合とは、その名の通りテーブルとテーブルを合体させることを言います。

1つのテーブルだけでは情報が足りないような場合に、別のテーブルから情報を引っ張ってきて別のテーブルを作ってあげるようなイメージです。例えば、上記の例では「役職ID」を基準に、テーブルAとテーブルBを結合しています。
テーブル結合には、内部結合と外部結合。2種類の結合パターンが存在しますが、本ページでは外部結合(OUTER JOIN)について解説しています。
外部結合(OUTER JOIN)とは?
外部結合(OUTER JOIN)とは、1つのテーブルを基準として、他のテーブルから情報を引っ張ってくるようなイメージの結合テクニックです。


図で見てみると決して難しくはありませんね。
ここで「結合条件」について、解説しておきます。
外部結合:結合条件
結合条件とは、テーブルAとテーブルBを結合させる条件のこと(何を基準にして2つのテーブルを合体させるか?)です。
例えば、テーブルAとテーブルB両方に存在する「役職ID」を結合条件として2つのテーブルをくっつけてみると、同じ「役職ID」をもつレコード同士が1つのレコードとして合体します。
テーブルA―役職ID = テーブルB―役職ID


では、内部結合とは一体何が違うのでしょうか?
詳しく見ていきましょう。
内部結合との相違点
2つのテーブルを結合させるという意味で両者は同一です。が、以下のような違いがあります。
内部結合

テーブルBには、役職ID「C」と「D」が存在しないので、テーブル結合が行われません。
外部結合

テーブルBには、役職ID「C」と「D」が存在しませんが、結合後のテーブルにもちゃんと基準となる全てのレコードが存在しています。

この微妙な違いを理解していないと、思わぬバグが出てきてしまうため、しっかりと学習しておきましょう!
ここからはABAPのSELECT文で外部結合(OUTER JOIN)を行う方法を解説します。
外部結合(SELECT ~ LEFT OUTER JOIN)
SELECT
(結合テーブルX)~(取得項目),
(結合テーブルX)~(取得項目),
…
FROM
(結合テーブル1)
LEFT OUTER JOIN
(結合テーブル2)
ON
(結合テーブル1)~(結合項目) = (結合テーブル2)~(結合項目)
AND (結合テーブル1)~(結合項目) = (結合テーブル2)~(結合項目)
AND (結合テーブル1)~(結合項目) = (結合テーブル2)~(結合項目)
INTO TABLE (内部テーブル名).
結合テーブル1を基準テーブル(左テーブル)とし、結合テーブル2からレコードを引っ張ってくる場合のコードルールです。
外部結合(OUTER JOIN)サンプルコード
SELECT
CEPC~PRCTR
CEPC~LOCK_IND
CEPCT~KTEXT
FROM
CEPC
LEFT OUTER JOIN
CEPCT
ON
CEPCT~SPRAS = SY-LANGU
AND CEPCT~PRCTR = CEPC~PRCTR
AND CEPCT~DATBI = CEPC~DATBI
AND CEPCT~KOKRS = CEPC~KOKRS
INTO CORRESPONDING FIELDS OF PRS_PRC
WHERE CEPC~PRCTR = LDF_PRCTR "利益センタ
AND CEPC~DATBI >= SY-DATUM. "有効終了日
SELECT
BSEG~BELNR, "取得項目:会計伝票番号
BSEG~GJAHR, "取得項目:会計年度
BSEG~MWSKZ, "取得項目:税コード
T007S~TEXT1 "取得項目:税コードテキスト
FROM
BSEG "取得元テーブル:会計伝票明細
LEFT OUTER JOIN
T007S "取得元テーブル:税コード名
ON
BSEG~MWSKZ = T007S~MWSKZ "結合条件:会社コード
AND T007S~KALSM = 'TAXJP' "結合条件:決定表
INTO TABLE LIT_BSEG_T007S. "取得項目を格納する内部テーブル
内部結合も、外部結合もその概念さえ覚えてしまえば、難しいものではありません。あれ、ちょっとこれなんだっけ?と思ったら是非またこのページに戻って学習してみてください。
SAP / ABAPを1から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!


