同じファイルに入っているレコード同士を結合して受信

同じファイルに入っているレコード同士を結合することもできます。つまり、転送元に指定するファイルが同じものであっても構いません。この機能を使用して、あるファイルのレコードに入っている情報を比較することができます。

例えば、SUPPLIERS ファイルで、同じ部品の仕入れ先が複数あることがわかります。そこで、同じ部品に他の仕入れ先より 2 倍以上高い価格を設定している仕入れ先が どれであるかを知りたいとします。所要の情報をworkstationへ転送するには、次のように指定します。
ライブラリー/ファイル (メンバー) SUPPLIERS, SUPPLIERS
JOIN BY T1.PARTNO = T2.PARTNO
SELECT T1.PARTNO, T1.SUPPNO, T1.PRICE, T2.SUPPNO, T2.PRICE
WHERE T1.PRICE > 2 * T2.PRICE
ORDER BY T1.PARTNO

転送元には同じファイルが 2 度指定されています。JOIN BY では、同じ部品番号を持つレコードを結合することを指定しています。これにより、同じ部品の 2 つの仕入れ先に関する情報を入れた 結合レコードが作成されます。それらの結合レコードをテストして、仕入れ先の価格が 他の仕入れ先の価格の 2 倍以上となっているレコードを知ることができます。

SUPPLIERS ファイルの中のレコードは、1 つずつ SUPPLIERS ファイルのすべてのレコード (それ自体も含む) と比較されます。そして、同じ部品番号が 見つかったとき、その 2 つのレコードが結合されます。この処理は、SUPPLIERS ファイルの中に入っているレコード 1 つ 1 つについて行われます。

各レコードの中で 1 番目の仕入れ先の価格が 2 番目の仕入れ先の価格と比較されます。そして、1 番目の仕入れ先の価格が 2 番目の仕入れ先の価格の 2 倍以上であるレコード だけが保持されます。

最終的な結果は次のようになります。
     Field:  T1.PARTNO   T1.SUPPNO   T1.PRICE   T2.SUPPNO   T2.PRICE
             ---------   ---------   --------   ---------   --------
  Record 1:       221          51        .30          54        .10
         2:       231          51        .10          54        .04
         3:       241          53        .08          54        .02
         4:       241          61        .05          54        .02