コマンドを学ぼう: リンクの範囲

通常、照会リンクでは、レコードを取り出すために位置付けを使います。
データ取得ということでは、範囲を使うこともできますが、間違って使うと、どうなるのでしょうか?

ここでは、その違いを明確にしておきたいと思います。
補足用にサンプルプログラムを作成してみました。
必要であれば、ダウンロードしてください。
(uniPaaS V1Plus V1.8SP1cで作成しています。)

次の図は、通常の照会リンクです。
「サブコード」カラムで位置付けしています。
サンプルプログラムの#12です。
図1

 

同じデータを使って、リンクテーブルの「区分」カラムに範囲を設定してみます。
式の内容は、'A' です。
サンプルプログラムの#13です。
図2

そして、実行した結果が、次の図です。
図3

メインソースのレコードは10件あるはずですが、3件しか表示されません。
メインソースに範囲設定はなく、リンクテーブルにのみ上述の範囲設定があります。
それでも、リンクの範囲に該当しないレコードは、メインソースも取得されなくなりました。
SQL系のデータベースを使ったときの「I=結合」リンクと同じような結果となります。
(結合リンクは、インナージョインとも呼びます。)

比較のため、図2のリンクで使った範囲の式を、位置付けにしてみます。
サンプルプログラムの#14です。
図4

実行した結果が、こちらの図です。
図5

サブコードと区分の位置付けの「AND条件」となるので、区分が'A'以外のリンクレコードは取得できませんが、メインソースのレコードは全件表示されています。

結論として、リンクで範囲を使うことは間違いとは言えません。
リンクが成功しない場合、メインソースのレコードも処理したくないというケースでは、使うことも考えられます。
テーブルの設計上、やむを得ないこともあるかもしれません。

しかし、照会リンクの範囲評価は、DBMS内で処理されるわけではないので、処理が遅くなるかもしれません。
タスク特性の範囲式と同様です。
リンクテーブルに対して範囲を指定する必要性があり、メインソース、リンクテーブル、ともに同一のSQL系データベースのときは、結合リンクを使うと、照会リンクよりも高速になることがあります。