「RecordJoinコンポーネントを使ってレコードをまとめる」で出てきた、RecordJoinコンポーネントのプロパティに存在するJoin処理をINNER/OUTERについての解説です。
事前準備:INNER JOIN(内部結合)とOUTER JOIN(外部結合)について
大まかな認識としては・・・
INNER JOIN(内部結合)では結合できる行のみをまとめます。
OUTER JOIN(外部結合)では結合できなくてもテーブルに存在する出力対象のフィールドはそのまま結合結果に表示されます。
(OUTER JOINでは場合によっては空欄のフィールドが表示されます。)
※結合の条件をプロパティの「入力キー」タブで設定することは結合の種類にかかわらず同じです。
INNER JOIN(内部結合)の場合
RecordJoinコンポーネントでINNER JOINに設定するにはプロパティの「基本」タブでJOIN処理をINNERに設定します。
今回は以下の2つのストリームで品名を使ってINNER JOINします。
〇ストリーム1側のレコード
"工場名","品名"
"東京工場","コーヒー"
"大阪工場","梅酒"
"東京工場","水"
"横浜工場","お茶"
※1行目のタイトル行は取得しない設定になっています。
〇ストリーム2側のレコード
"品名","数量","金額","合計金額"
"お茶",1,100,0
"コーヒー",2,120,0
"梅酒",4,350,0
※1行目のタイトル行と4つ目のフィールドは取得しない設定になっています。
出力される品名はストリーム1側の品名です。
INNER JOINの結果
"東京工場","コーヒー","2","120"
"大阪工場","梅酒","4","350"
"横浜工場","お茶","1","100"
ストリーム2側に品名が水の行がないため、その行ではjoinが行われません。
そのため、ストリーム1側の「"東京工場","水"」の行は出力されません。
OUTER JOIN(外部結合)の場合
INNER JOINと同じ条件で、プロパティのJOIN処理をOUTERに変更してOUTER JOINを行います。
OUTER JOINの結果
"東京工場","コーヒー","2","120"
"大阪工場","梅酒","4","350"
"東京工場","水","",""
"横浜工場","お茶","1","100"
ストリーム1の「"東京工場","水"」の行はストリーム2側に品名が水でjoinできるレコードが存在しないため、数量と金額のフィールドが空欄になります。OUTER JOINの場合、joinできなかったレコードもフィールドが空欄で出力されます。