# Join

join プレフィックスは、ロード済みのテーブルを名前が付いた既存テーブルまたは直前に作成されたデータ テーブルと結合します。

データを結合すると、追加の項目または属性のセット (ターゲット テーブルにまだ存在しないもの) によってターゲット テーブルが拡張されます。ソース データ セットとターゲット テーブルの間の共通の項目名は、新しい入力レコードを関連付ける方法を決定するために使用されます。これは一般に「自然結合」と呼ばれます。Qlik 結合操作では、結合の関連付けの一意性と使用される結合の種類に応じて、結果のターゲット テーブルのレコードが開始時よりも増減する可能性があります。

結合には次の 4 つのタイプがあります。

Left join

左結合は、最も一般的な結合タイプです。たとえば、トランザクション データ セットがあり、それを参照データ セットと組み合わせたい場合、通常は `Left Join` を使用します。最初にトランザクション テーブルをロードし、次に `Left Join` プレフィックスを介して既にロードされているトランザクション テーブルに結合しながら、参照データ セットをロードします。`Left Join` は、すべてのトランザクションをそのまま保持し、一致が見つかった補足参照データ項目を追加します。

Inner join

一致する関連付けがある結果のみを対象とする 2 つのデータ セットがある場合は、`Inner Join`の使用を検討してください。これにより、一致するものが見つからない場合、ロードされたソース データとターゲット テーブルの両方からすべてのレコードが削除されます。その結果、結合操作が行われる前よりもターゲット テーブルのレコードが減少する可能性があります。

Outer join

ターゲット レコードとすべての着信レコードの両方を保持する必要がある場合は、`Outer Join`を使用します。一致が見つからない場合、結合の反対側の項目は未入力 (null) のままですが、レコードの各セットは引き続き保持されます。

type キーワードを省略した場合、既定の結合タイプは外部結合となります。

Right join

この結合タイプは、ロードされるすべてのレコードを保持しながら、結合の対象となるテーブル内のレコードを、着信レコードに関連付けの一致があるレコードのみに減らします。これはニッチな結合タイプであり、事前にロードされたレコードのテーブルを必要なサブセットにトリミングする手段として使用されることがあります。

さまざまなタイプの結合操作からの結果セットの例

さまざまなタイプの結合操作からの結果セットの例

さまざまなタイプの結合操作からの結果セットの例 ![さまざまなタイプの結合操作からの結果セットの例。各操作の前後にデータ テーブルが表示されます。](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-join-examples-operations.png)

情報メモ結合操作のソースとターゲットの間に共通の項目名がない場合、結合はすべての行のデカルト積になります。これは「クロス結合」と呼ばれます。

「クロス結合」操作による結果セットの例

「クロス結合」操作による結果セットの例

「クロス結合」操作による結果セットの例 ![クロス結合操作 (任意のタイプの結合操作を含むことができます) の後の出力と入力データの前後の比較。](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-examples-join-no-common-fields.png)

構文:

[inner | outer | left | right ]Join [ (tablename ) ]( loadstatement | selectstatement )

引数

| 引数 | 説明 |
| --- | --- |
| tablename | 名前が付いたテーブルが、ロード済みのテーブルと比較されます。 |
| loadstatementまたはselectstatement | ロード済みテーブルの LOAD または SELECT ステートメントです。 |

これらのトピックは、この関数を使用するのに役立つかもしれません。

関連トピック

| トピック | 説明 |
| --- | --- |
| [Join と Keep を使用したテーブルの結合](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm) | このトピックでは、データ セットの「結合」と「保持」の概念について詳しく説明します。 |
| [Keep](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm) | `Keep` ロード プレフィックスは `Join` プレフィックスに似ていますが、ソース データセットとターゲット データセットを結合しません。代わりに、採用された操作のタイプ (内側、外側、左、または右) に従って各データセットをトリムします。 |

## 例 1 - 左結合: 参照データ セットを使用してターゲット テーブルを強化する

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* `Changes`という名前のテーブルに読み込まれる、変更レコードを表すデータセット。これには、ステータス ID キー項目が含まれます。

* 変更ステータスを表す 2 番目のデータセット。ロードされ、左の `Join` ロード プレフィックスで結合することによって元の変更レコードと結合されます。

この左結合により、共通のステータス ID に基づいて着信ステータス レコードの一致が見つかったステータス属性を追加しながら、変更レコードを確実にそのまま残すことができます。

ロード スクリプト

```
Changes:
Load * inline [ 
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact 
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Status:
Left Join (Changes)
Load * inline [
Status ID	Status	Sub Status
1	Open	Not Started
2	Open	Started
3	Closed	Completed
4	Closed	Cancelled
5	Closed	Obsolete			
] (delimiter is '\t');
```

結果

データ モデル ビューアを開き、データ モデルの形状を確認します。非正規化されたテーブルが 1 つだけ存在します。これは、元のすべての変更レコードの組み合わせであり、一致するステータス属性が各変更レコードに結合されています。

結果の内部データ モデル

| 変更 |
| --- |
| 変更 ID |
| ステータスID |
| 開始予定日付 |
| 終了予定日付 |
| ビジネスへの影響 |
| ステータス |
| サブ ステータス |

データ モデル ビューアでプレビュー ウィンドウを展開すると、この完全な結果セットの一部がテーブルに編成されて表示されます。

データ モデル ビューアでの変更テーブルのプレビュー

| 変更 ID | ステータスID | 開始予定日付 | 終了予定日付 | ビジネスへの影響 | ステータス | サブ ステータス |
| --- | --- | --- | --- | --- | --- | --- |
| 10030 | 4 | 19/01/2022 | 23/02/2022 | なし | 終了 | キャンセル済み |
| 10031 | 3 | 20/01/2022 | 25/03/2022 | 低 | 終了 | 完了 |
| 10015 | 3 | 04/01/2022 | 15/02/2022 | 低 | 終了 | 完了 |
| 10103 | 1 | 02/04/2022 | 29/05/2022 | 中間 | 開く | 開始されていない |
| 10116 | 1 | 15/04/2022 | 24/04/2022 | なし | 開く | 開始されていない |
| 10134 | 1 | 03/05/2022 | 08/07/2022 | 低 | 開く | 開始されていない |
| 10264 | 1 | 10/09/2022 | 17/10/2022 | 中間 | 開く | 開始されていない |
| 10040 | 1 | 29/01/2022 | 22/04/2022 | なし | 開く | 開始されていない |
| 10323 | 1 | 08/11/2022 | 26/11/2022 | 高 | 開く | 開始されていない |
| 10187 | 2 | 25/06/2022 | 24/08/2022 | 低 | 開く | 開始済み |
| 10185 | 2 | 23/06/2022 | 08/09/2022 | なし | 開く | 開始済み |
| 10220 | 2 | 28/07/2022 | 06/09/2022 | なし | 開く | 開始済み |
| 10326 | 2 | 11/11/2022 | 05/12/2022 | なし | 開く | 開始済み |
| 10138 | 2 | 07/05/2022 | 03/08/2022 | なし | 開く | 開始済み |
| 10334 | 2 | 19/11/2022 | 06/02/2023 | 低 | 開く | 開始済み |

[ステータス] テーブルの 5 行目 (ステータス ID:「5」、ステータス:「Closed」、サブステータス:「Obsolete」) は [変更] テーブルのどのレコードにも対応していないため、この行の情報は上記の結果セットには表示されません。

データ ロード エディタに戻ります。データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します: `Status`。

このメジャーを追加します。

`=Count([Change ID])`

これで、ステータスごとに変更の数を調べることができます。

結果テーブル

| ステータス | =Count([Change ID]) |
| --- | --- |
| 開く | 12 |
| 終了 | 3 |

## 例 2 – 内部結合: 一致するレコードのみを組み合わせる

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* `Changes` という名前のテーブルに読み込まれる、変更レコードを表すデータセット。

* ソース システム `JIRA` から派生した変更レコードを表す 2 番目のデータセット。変更ステータスを表す 2 番目のデータセット。ロードされ、左の `Inner Join` ロード プレフィックスで結合することによって元の変更レコードと結合されます。

この `Inner Join` により、両方のデータセットで見つかった 5 つの変更レコードのみが確実に保持されます。

ロード スクリプト

```
Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

JIRA_changes:
Inner Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10000	JIRA					
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
20000	TFS
] (delimiter is '\t');
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `Source System`

* `Change ID`

* `Business Impact`

これで、結果の 5 つのレコードを調べることができます。`Inner Join` からの結果テーブルには、両方のデータセットで一致する情報を持つレコードのみが含まれます。

結果テーブル

| ソース システム | 変更 ID | ビジネスへの影響 |
| --- | --- | --- |
| JIRA | 10030 | なし |
| JIRA | 10134 | 低 |
| JIRA | 10220 | なし |
| JIRA | 10323 | 高 |
| JIRA | 10334 | 低 |

## 例 3 – 外部結合: 重複するレコード セットの結合

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* `Changes` という名前のテーブルに読み込まれる、変更レコードを表すデータセット。

* ソース システム `JIRA` から派生した変更レコードを表す 2 番目のデータセット。変更ステータスを表す 2 番目のデータセット。これは、ロードされ、左の `Outer Join` ロード プレフィックスで結合することによって元の変更レコードと結合されます。

これにより、両方のデータセットから重複するすべての変更レコードが確実に保持されます。

ロード スクリプト

```
// 8 Change records

Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
] (delimiter is '\t');

// 6 Change records

JIRA_changes:
Outer Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
10597	JIRA
] (delimiter is '\t');
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* `Source System`

* `Change ID`

* `Business Impact`

これで、結果の 10 つのレコードを調べることができます。

結果テーブル

| ソース システム | 変更 ID | ビジネスへの影響 |
| --- | --- | --- |
| JIRA | 10030 | なし |
| JIRA | 10134 | 低 |
| JIRA | 10220 | なし |
| JIRA | 10323 | - |
| JIRA | 10334 | 低 |
| JIRA | 10597 | - |
| - | 10015 | 低 |
| - | 10031 | 低 |
| - | 10040 | なし |
| - | 10138 | なし |

## 例 4 – 右結合: セカンダリ マスター データセットによるターゲット テーブルのトリミング

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* Changes という名前のテーブルに読み込まれる、変更レコードを表すデータセット。

* Teamwork のソース システムからの変更レコードを表す 2 番目のデータセット。これはロードされ、Right Join ロード プレフィックスで結合することによって元のレコードと結合されます。

これにより、 Teamwork 変更レコードのみが保持され、ターゲット テーブルに一致する Change IDがなくても Teamwork レコードが失われることはありません。

ロード スクリプト

```
Changes:

Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Teamwork_changes:
Right Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10040	Teamwork
10015	Teamwork
10103	Teamwork
10031	Teamwork
50231	Teamwork
] (delimiter is '\t');
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:

* Source System

* Change ID

* Business Impact

これで、結果の 5 つのレコードを調べることができます。

結果テーブル

| ソース システム | 変更 ID | ビジネスへの影響 |
| --- | --- | --- |
| チームワーク | 10015 | 低 |
| チームワーク | 10031 | 低 |
| チームワーク | 10040 | なし |
| チームワーク | 10103 | 中間 |
| チームワーク | 50231 | - |

## 詳細を見る

* [Load](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Inner](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Inner.htm)
* [Outer](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Outer.htm)
* [Left](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Left.htm)
* [Right](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Right.htm)
* [Keep](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm)
* [Join と Keep を使用したテーブルの結合](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)