テーブルの結合

テーブルを結合すると、レコード構造が異なる 2 つの ACL テーブルを結合して、第 3 の新しいテーブルとして出力できます。 新しいテーブルに含める 2 つの元のテーブルからフィールドの組み合わせを選択できます。

異なる複数のフィールド(データ要素)があるとレコード構造は異なります。 結合は、分析を始めるにあたり、永続的に結合されたデータのセットを必要とする調査作業に適しています。

シナリオ

考えられる不適切な報酬のデータを分析する方法の 1 つとして、従業員でもある業者を特定する必要があります。

アプローチ

業者マスター テーブルを従業員テーブルと結合し、共通キー フィールドの住所を使用します。

結合された出力テーブルには、同じ住所の業者と従業員が含まれます。

メモ

このトピックでは、データ インポート処理の一部として、データ アクセス ウィンドウでテーブルを結合する方法の詳細については、データ アクセス ウィンドウのテーブルの結合を参照してください。

このトピックでは、ACLACL テーブルを結合することについて説明します。

共通のキー フィールドを使用したテーブルの結合

共通のキー フィールド(従業員番号やベンダー ID、または住所など両方のテーブルに存在するデータ要素)を使用してテーブルを結合します。 2 つのキー フィールドに同一の値が存在する場合は 1 つの一致のみが生じます。この一致は別のテーブルのレコードを個別に結合します。

以下の例では、ベンダー マスター テーブルと従業員マスター テーブルが、共通キーとして各テーブルの住所フィールド(Vendor_Street、および Emp_Address)を使用して結合されます。 出力テーブルには 2 つの結合されたレコードがあります。 例では、各テーブルの結合されていないレコードは、出力テーブルにも含まれます。これは、選択できるオプションです。

類似またはほぼ同一のキー フィールド値を使用したテーブルの結合

ACL 曖昧結合は、キー フィールドと値の曖昧一致を使用して、2 つの ACL テーブルを新しい 3 番目のテーブルに結合します。 ほとんどの点において、曖昧結合は標準の ACL 結合に似ています。 主な違いは、曖昧結合は、キー フィールド値の完全一致に基づくレコードの結合のほかに、近似一致に基づくレコードの結合ができることです。

詳細については、曖昧結合を参照してください。

キー フィールドの要件

結合するテーブルのキー フィールドには複数の要件が適用されます。

主テーブル、副テーブル、キー フィールド

結合操作の対象となるテーブルとキー フィールドは、テーブルを開く順序に基づき、およびとして識別されます。

  • 主テーブル 最初に開いたテーブル
  • 主キー フィールド 主テーブルから選択したキー フィールド
  • 副テーブル開く 2 番目のテーブル

    副テーブルを開くことは、それを主テーブルに関連付け、処理のために利用できるようにすることを意味します。 副テーブルはビュー タブで開かれません。

  • 副キー フィールド 副テーブルから選択したキー フィールド

主および副となるテーブルやキー フィールドは自由に選択できます ただし、この結合が成功するのは、その対象キー フィールドがキー フィールドの要件を満たしている場合のみです。

詳細については、キー フィールドについてを参照してください。

一致するレコードと不一致のレコード

結合を操作するときには、一致するレコードと一致しないレコードの両方を検討する必要があります。

  • 一致したレコードした主レコードおよび副レコードの値が同一である場合は、その主レコードと副レコードが一致します。

    メモ

    選択する結合タイプによっては、一致する副キー値の重複する発生は結合されない可能性があります。 詳細については以下を参照 なぜ結合された出力テーブルには一部の副テーブル レコードがないのですか。

  • 一致しないレコード主レコードおよび副レコードの値が同一である場合は、その主レコードと副レコードが一致しません。

結合後のテーブルに含まれるレコード

一致および不一致のキー フィールド値、および実行する結合のタイプによって、元の 2 つのテーブルから新しい結合されたテーブルに抽出されるレコードが決まります。

結合のタイプ

ACL では 6 種類の結合タイプをサポートします。概要は以下のとおりです。 具体的な例については、結合タイプの例を参照してください。

結合タイプ 結合後のテーブルに含まれるレコード
主テーブルの一致レコードを含める 不一致の主レコード 副テーブルの一致レコードを含める 副にテーブルの不一致レコードを含める

一致した主レコードおよび副レコード

(一致する 1 件目の副レコード)

 

含まれない:副テーブルで一致する副キーの重複も含めます

 

一致した主レコードおよび副レコード

(重複する副レコードのすべての一致)

 

含まれて結合される:副テーブルで一致する副キーの重複も含めます

 

不一致の主レコード

 

 

 

すべての主レコードと、キーに一致する副レコード

含まれない:副テーブルで一致する副キーの重複も含めます

 

すべての副レコードと、キーに一致する主レコード

 

含まれて結合されない:副テーブルで一致する副キーの重複も含めます

含まれる:副テーブルで一致しない副キーの重複も含めます

すべての主レコードおよび副レコード

含まれて結合されない:副テーブルで一致する副キーの重複も含めます

含まれる:副テーブルで一致しない副キーの重複も含めます

なぜ結合された出力テーブルには一部の副テーブル レコードがないのですか。

6 つの ACL 結合タイプのうちの 5 つは、一致する副キー値の重複を結合しません。 一致する主キー値の重複は結合されますが、すべて一致する副キー値の 1 つめに結合されます。 これらの結合タイプは、多対一結合として、広く知られています。

すべての一致する副キー値を結合するには、次のいずれかを実行します。

  • テーブルを逆にする結合で、主および副テーブルを逆にします。 元の主テーブルのキー フィールドの値が一意の場合に、この方法が適しています。 両方のテーブルで主キー値の重複がある場合、この方法では、必要な結果が得られない可能性があります。
  • 多対多結合を使用 一致する主および副(すべての副一致)結合タイプを使用します。

多対一結合と多対多結合

多対一結合と呼ばれる ACL 結合、および多対多結合と呼ばれる 6 つの結合タイプの 1 つを確認できます。 これらの用語は、ACL 結合の動作を広く説明するための役立ちます。 ただし、これらの用語は一般化されているため、結合動作を完全に表すわけではありません。

ACL 多対一結合

1つの式では、ACL で使用できる結合タイプは多対一結合です。 主キー フィールドのすべての値が一意の場合、一対多結合としても機能します。

ACL  多対多結合

1 つの ACL 結合タイプ – 一致する主および副(すべての副一致) – すべての一致する主および副レコードが含まれます。 この結合タイプは、多対多結合とも呼ばれます。

主キー フィールドのすべての値が一意の場合、多対多結合は一対多結合としても機能します。

ACL 結合と SQL 結合フィルターの違い

結合]ダイアログ ボックスを使用して実行する ACL 結合と、[データ アクセス]ウィンドウを使用してデータを ACLにインポートするときに使用できる SQL との間には、主な違いがあります。

  • ACL 結合重複する副キー一致値は結合されません(多対多結合を除く)。
  • SQL 結合重複する副キー一致値は、選択する結合タイプに関係なく、すべて結合されます。

    [データ アクセス]ウィンドウの SQL 結合の詳細については、データ アクセス ウィンドウのテーブルの結合を参照してください。

メモ

ACL は ACL 固有の方法で、「多対多結合」という用語を使用しています。 SQL 多対多結合と同義ではありません。

結合されるテーブルの並べ替え

結合されたテーブルは主キー フィールドを基準に昇順に並べ替えられています。これは、結合の実行時に主キー フィールドを並べ替えている(あらかじめ並べ替える)、あるいは主テーブルが既にこの並び順になっていることを前提とします。

主キー フィールドを基準に並べ替えられてない場合は、結合後のテーブルは主テーブルの既存のソート順を使用します。

並べ替えと結合に関する追加情報

  • 主テーブルが、必ずソート済みである必要はありませんが、主テーブルがまったくソートされていない、または並び順が降順の場合は、処理時間が大幅にかかります。
  • 部分的にソートされている主テーブルのキー フィールドを使用して結合を実行する場合(たとえば、主テーブルがまず月順にソートされ、次に勘定コード順にソートされているときに、勘定コードをキーとして結合する場合など)、処理時間はそれほどかかりません。
  • 結合の実行時、主テーブルと副テーブルには[あらかじめ並べ替える]オプショがンあります。
  • 主キー フィールドと副キー フィールドは、並べ替える代わりにインデックスを付けることができます。 副テーブルのキー フィールドは、昇順でインデックスが付けられている必要があります。 副テーブルへのインデックスの適用は、コマンド ラインまたはスクリプト内のみで行うことができます。

結合に関する追加情報

以下のテーブルでは結合に関する追加情報を提供します。

 

機能分野

詳細

一致しないレコードおよびフィールド値の欠落

結合に不一致の主レコードまたは不一致の副レコードが含まれる場合、欠落するフィールド値の対処として、文字や日付時刻フィールドには空白を、数値フィールドにはゼロを、そして論理フィールドには "F" を表示します。

副テーブルのキー フィールドの重複または空白

副テーブルのキー フィールドの値が重複していたり欠落していたりすることで、その後の分析が無効になってしまうような場合、事前に副テーブルから重複や空白を除去することで解決する可能性があります。

部分一致

キー フィールド値の部分一致はサポートされていません。 一致するには、値が 100% 同じである必要があります。

例:

  • 一致 AB-123, AB-123
  • 不一致 AB-123, 123

メモ

ACL 曖昧結合 では、部分一致がサポートされます。

キー フィールド長の同一化は不要

ACL では、テーブルの結合時に、(文字キー フィールド以外で)主キー フィールドと副キー フィールドの長さが同一であることを強制しません。

数値キー フィールドには同一の長さを使用することをお勧めします。必要であれば、結合を行う前にフィールド長を手作業で揃えてください。 フィールド長が異なる数値キー フィールドを使用して結合を行った結果は信頼性がありません。

日付、日付時刻、または時刻を用いた操作を実行する場合、ACLACL 内部の日付時刻形式を使用しているため、日付時刻キー フィールドの長さが異なることがあります。

行揃えと大文字小文字の同一化

文字キー フィールドを使用してテーブルの結合を行う場合、両フィールドの行揃えおよび大文字小文字の表記が同一でなければなりません。

  • 両方のキー フィールドは同じ行揃えであることが必要です。 LTRIM() 関数を使用すると、キー フィールドから先頭のスペースを削除します。

  • 両方のキー フィールドはそれぞれ、フィールド内の単語(アルファベット)の大文字、小文字または大文字/小文字の混在の表記が同じあることが必要です。 大文字小文字の表記を同一にするには、UPPER( )、LOWER( ) または PROPER( ) 関数を使用します。

結合に含まれないレコードのカウント

実行する結合タイプによって、主テーブルおよび/または副テーブルのレコードが結合後のテーブルに含まれないこともあります。 コマンド ログでは、含まれなかった主レコードの数(<n> 件のレコードがバイパス(除外)されました)が表示されますが、除外された副レコードの数は表示されません。

結合操作で使用される条件式と適用範囲オプション

多対一結合の場合、処理されるレコードを絞り込むための If、While、First、Next パラメーターは、主テーブルにのみ適用されます。 多対多結合の場合は、If 式と While 式によって副テーブルを参照することもできます。

結合されるテーブルでの同一フィールド名

主キー フィールドの名前と副キー フィールドの名前が同じ、またその他の出力対象フィールドの名前がテーブル間で同一の場合は、出力テーブルのレイアウトで副テーブルの対象フィールド名の末尾に 2 が付けられます。 たとえば、元のフィールド名が vendor_ID であれば vendor_ID2(以降、vendor_ID3 ...など)となり、出力テーブルでフィールド名が重ならないようにします。

ただし、出力テーブルのビューの代替列見出し列には、変更されていない同じ名前が表示されます。

副テーブルとして使用できないテーブル

現在、子テーブルとして主/親テーブルに関連付けられているテーブルは、結合で副テーブルとして選択することはできません。 この制限を回避するには、その主/親テーブルのレイアウト、または子テーブルのレイアウトのコピーを作成し、そのコピーされたレイアウトを使って結合します。また、関連付けの関係を削除するという選択肢もあります。

結合されるテーブルの場所に関する制限事項

テーブルを結合する場合、その対象となるテーブルは同じ ACL プロジェクト内に存在している必要があります。 サーバーにあるテーブルであれば同じサーバー上にあり、同じサーバー プロファイルを使用してアクセスする必要があります。 ローカルのテーブルとサーバーのテーブルを結合することはできません。

結合されるテーブルのサイズ

実行する結合タイプによって、結合後のテーブルに含まれるレコードの数は、結合前の元の 2 つのテーブルに含まれるレコードの総数に比べ、多くなったり、少なくなったり、あるいは等しくなることもあります。

UTC ベースのデータと非 UTC データの結合

UTC ベースおよび非 UTC の日付時刻キー フィールドは、2 つのテーブルの結合に使用できます (UTC は協定世界時で、経度 0 度地点における時刻)。日付時刻または時刻を用いた操作を実行する場合、ACL では ACL 自身の内部日付時刻形式を使用するので、以下の 2 つの日付時刻は同一であると解釈され、一致します。

  • UTC ベース – 31/12/2014 10:30:15-05:00

  • 非 UTC – 31/12/2014 15:30:15

ACL 操作の中で、UTC ベースの時刻データと非 UTC の時刻データを混在させる場合は注意が必要です。 ACL は上の 2 つの時刻値を一致させます。しかし、一方の値はタイムゾーンを参照し、もう一方の値は参照しないため、論理的には意味がない可能性があります。 UTC の詳細については、[日付と時刻]タブ([オプション]ダイアログ ボックス)を参照してください。

[ トップに戻る ]

(C) ACL Services Ltd. All Rights Reserved. 2019年2月28日