複数のテーブルをレポートに追加するときに、「結合タイプの切替え」のオプションがあります。結合タイプとはどのようなものですか。テーブル結合とはどのようなものですか。
テーブル結合を使用すると、複数のデータベース・テーブルからのデータを単一のクエリー結果にリンクできます。これにより、複数のテーブルからのデータを単一のレポートに表示できます。または複数のテーブルからデータを使用してレポートを作成する場合、テーブル間で使用する結合の種類を指定できます。
2つのテーブルの情報を正しく結合するには、各テーブルに、両方のテーブルに共通したデータ・フィールドを含める必要があります。フィールドは、各テーブル内で同じ名前である必要はありませんが、両方のテーブルで共通の要素を参照する必要があります。
テーブル間の結合タイプの特定
レポートでテーブルが結合される場合、使用されるアイコンは結合タイプを示します。左側の円が青色で完全に塗りつぶされている場合、テーブル間には外部結合があります。アイコンの重なった部分のみ青色である場合、テーブル間の結合は内部結合です。
レポートでテーブルを結合する方法を特定するには、次の手順を使用します。
- レポート・エクスプローラから、編集のためレポートを開きます。または、レポートがナビゲーション項目にリストされている場合、レポートを右クリックし、「レポート定義の編集」を選択します。
- 「ホーム」タブから、「テーブル」をクリックします。
- また、リストにある字下げしたテーブルをクリックして、結合タイプを確認することもできます。
- 結合タイプを変更するには、「外部」または「内部」のラジオ・ボタンをクリックして、「OK」をクリックします。次にレポートを保存します。
簡略例
たとえば、Oracle B2C Serviceデータベースでは、インシデント・テーブルには、アカウントIDによってインシデント割当てのあるスタッフ・メンバーを指定する割当て済みのフィールドが含まれます。アカウント・テーブルにはスタッフ・アカウントがリストされ、acct_idフィールドが含まれます。incidents.assignedフィールドとaccounts.acct_idフィールドはどちらも、同じ情報(スタッフ・アカウントID)を参照するため、インシデント・テーブルとアカウント・テーブルは結合可能です。その結果、これらのテーブルを結合することで、各スタッフ・メンバーに割り当てられたインシデントの数など、両方のテーブルからのデータを含めてレポートを実行したり、ビューを使用できるようになります。
Ref_no | インシデントステータス | 割り当てられたインシデント | アカウントAcct_ID | アカウントの表示名 |
---|---|---|---|---|
001 | 未解決 | 32 | 4 | Jim |
002 | 解決済 | 15 | 9 | Paula |
003 | 未解決 | 15 | 15 | Brenda |
004 | 未解決 | (null) | 27 | Tom |
005 | 更新済 | 27 | 32 | Ken |
クエリー結果に含まれる特定のデータは、クエリーで内部結合が使用されているか、外部結合が使用されているかに応じて異なります。ビューまたはレポートでテーブル・インスタンスを扱うときに「結合タイプの切替え」を選択すると、結合タイプは、内部結合から外部結合に、または外部結合から内部結合に変わります。テーブル間の結合タイプを変更するには、2つのテーブルの下部を右クリックして、「結合タイプの切替え」を選択します。
重なっている円のアイコンは、テーブル間で使用される結合のタイプを示します。円の交差部分のみ影が付いている場合、結合は内部結合です。左の円全体に影が付いている場合、結合は外部結合です。テーブルがどのように結合されているかについて、より具体的な情報を表示するには、テーブル名を右クリックして、「ノード情報」を選択します。
内部結合
最初のテーブルのフィールドの値が、2番目のテーブルのフィールドの値としても表示される場合にのみ、内部結合はクエリーからのデータを返します。これは、クエリーでデータを返すには、両方のテーブルの両方のフィールドにデータが存在する必要があることを意味します。
内部結合では、テーブルの順序は生成されるデータ・セットに影響しません。
例:インシデント・テーブルおよびアカウント・テーブルのケースを使用して、内部結合を使用した場合は、スタッフ・メンバーに割り当てられているインシデントのみクエリー結果に含まれます。割当てを解除されたインシデントは、アカウント・テーブルに値がありません。つまり、これらのインシデントは結果セットに含まれないことを意味します。同様に、インシデントが割り当てられていないスタッフ・メンバーには、インシデントがないためクエリー結果に表示されません。
Ref_no | ステータス | 割当て/ Acct_ID |
表示名 |
---|---|---|---|
001 | 未解決 | 32 | Ken |
002 | 解決済 | 15 | Brenda |
003 | 未解決 | 15 | Brenda |
005 | 更新済 | 27 | Tom |
注意:内部結合の場合、インシデント004は(スタッフ・メンバーに割り当てられていないため)クエリー結果に表示されず、JimとPaula は、インシデントが割り当てられていないためデータセットにリストされません。
外部結合
外部結合は、左結合とも呼ばれます。外部結合の場合、クエリー結果には、最初のテーブルからのデータがすべて含まれ、2番目のテーブルにデータが存在する場合は、各レコードの2番目のテーブルからのデータも含まれます。外部結合の場合、データが返される行には、最初(または左)のテーブルからの情報しか含まれない可能性があります。2番目のテーブルに関連付けられたフィールドが、ヌル値になる場合があります。
外部結合を扱う場合、テーブルの順序は非常に重要になります。生成されるデータセットは、結合に対して最初にリストされるテーブルによってまったく異なります。
例:簡略化されたインシデント・テーブルおよびアカウント・テーブルを使用し、インシデント・テーブルを最初のテーブルとして外部結合すると、生成されるデータセットは次のようになります。
Ref_no | ステータス | 割当て/ Acct_ID |
表示名 |
---|---|---|---|
001 | 未解決 | 32 | Ken |
002 | 解決済 | 15 | Brenda |
003 | 未解決 | 15 | Brenda |
004 | 未解決 | (NULL) | (NULL) |
005 | 更新済 | 27 | Tom |
注意:この外部結合では、インシデント004は結果に含まれています。どのインシデントにも関連付けることができないため、PaulaとJim は結果に表示されません。
例:簡略化されたインシデント・テーブルおよびアカウント・テーブルを使用し、アカウント・テーブルを最初のテーブルにすると、生成されるデータセットは次のようになります。
表示名 | Acct_ID/ 割当て |
Ref_no | ステータス |
---|---|---|---|
Jim | 4 | (NULL) | (NULL) |
Paula | 9 | (NULL) | (NULL) |
Brenda | 15 | 002 | 解決済 |
Brenda | 15 | 003 | 未解決 |
Tom | 27 | 005 | 更新済 |
Ken | 32 | 001 | 未解決 |
注意:この外部結合では、JimとPaulaは、割り当てられているインシデントがない場合でも、データセットにリストされています。インシデント004は、スタッフ・メンバーに関連付けられないので、結果には含まれません。
詳細情報は、現在ご利用のバージョンのオンライン・ドキュメンテーションにあるテーブル関係の管理セクションをご覧ください。Oracle B2C Service オンライン・ドキュメンテーション又はマニュアルにアクセスするには、Documentation for Oracle B2C Service Productsをご覧ください。