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:学習カリキュラム ←こちらから!