同じファイルに入っているレコード同士を結合して受信
同じファイルに入っているレコード同士を結合することもできます。つまり、転送元に指定するファイルが同じものであっても構いません。この機能を使用して、あるファイルのレコードに入っている情報を比較することができます。
例えば、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