# Join

Префикс join объединяет загруженную таблицу с существующей таблицей, для которой задано имя, или с последней созданной таблицей данных.

Эффект объединения данных заключается в расширении целевой таблицы дополнительным набором полей или атрибутов, а именно тех, которых еще нет в целевой таблице. Любые общие имена полей между исходным набором данных и целевой таблицей используются для определения того, как связать новые входящие записи. Это обычно называют «естественным объединением» (natural join). Операция объединения Qlik может привести к тому, что в результирующей целевой таблице будет больше или меньше записей, чем было изначально, в зависимости от уникальности ассоциации объединения и типа используемого объединения.

[Join script prefix](https://play.vidyard.com/7xrdzssVH99Jsr8gmPunCC)

## Типы объединений

Существует четыре типа объединений:

* Left join (левое объединение)

* Inner join (внутреннее объединение)

* Outer join (внешнее объединение)

* Right join (правое объединение)

Примеры результирующих наборов данных от различных типов операций объединения

Примеры результирующих наборов данных от различных типов операций объединения

Примеры результирующих наборов данных от различных типов операций объединения ![Примеры результирующих наборов данных от различных типов операций объединения с представлением таблиц данных до и после каждой операции. Входные данные состоят из целевой таблицы и входящего набора данных. Целевая таблица имеет два столбца с двумя записями строк для полей 'Trade ID' и 'Asset Class'. Входящие данные имеют два столбца с двумя записями строк для полей 'Trade ID' и 'Exchange'. Left Join сохраняет исходную целевую таблицу и добавляет третий столбец, где все пусто, кроме добавления одной из записей строк 'Exchange'. Inner Join создает таблицу с одной строкой Trade ID и третьим столбцом, опять же, для записи строки 'Exchange'. Outer Join сохраняет целевую таблицу и добавляет третий столбец, а также третью строку, к которой добавляется вторая строка входящего набора данных. Right Join удаляет вторую запись строки целевой таблицы и заменяет ее информацией из второй записи строки входящего набора данных, добавляя при этом третий столбец.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-join-examples-operations.png)

### Left join

Left join — это самый распространенный тип объединения. Например, если у вас есть набор данных транзакций и вы хотите объединить его с эталонным набором данных, вы обычно используете `Left Join`. Вы сначала загружаете таблицу транзакций, а затем загружаете эталонный набор данных, объединяя его с помощью префикса `Left Join` с уже загруженной таблицей транзакций. `Left Join` сохраняет все транзакции в исходном виде и добавляет дополнительные поля эталонных данных там, где найдено совпадение.

Left join

Left join

Left join ![Диаграмма, описывающая на высоком уровне комбинации данных, которые происходят во время левого объединения.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/join-types-scripting_left.png)

### Inner join

Если у вас есть два набора данных, и вас интересуют только результаты, где есть соответствующая ассоциация, рассмотрите возможность использования `Inner Join`. Это исключит все записи как из загруженных исходных данных, так и из целевой таблицы, если совпадение не найдено. В результате в вашей целевой таблице может остаться меньше записей, чем до выполнения операции объединения.

Inner join

Inner join

Inner join ![Диаграмма, описывающая на высоком уровне комбинации данных, которые происходят во время внутреннего объединения.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/join-types-scripting_inner.png)

### Outer join (по умолчанию)

Если вам нужно сохранить как целевые записи, так и все входящие записи, используйте `Outer Join`. Там, где совпадение не найдено, каждый набор записей все равно сохраняется, в то время как поля с противоположной стороны объединения останутся незаполненными (null).

Если ключевое слово типа опущено, типом объединения по умолчанию является внешнее объединение.

Outer join

Outer join

Outer join ![Диаграмма, описывающая на высоком уровне комбинации данных, которые происходят во время внешнего объединения.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/join-types-scripting_outer.png)

### Right join

Этот тип объединения сохраняет все записи, которые должны быть загружены, при этом сокращая количество записей в таблице, на которую направлено объединение, только до тех записей, для которых есть совпадение ассоциации во входящих записях. Это нишевый тип объединения, который иногда используется как средство обрезки уже предварительно загруженной таблицы записей до требуемого подмножества.

Right join

Right join

Right join ![Диаграмма, описывающая на высоком уровне комбинации данных, которые происходят во время правого объединения.](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Resources/Images/join-types-scripting_right.png)

### Cross join

Примечание к информацииЕсли между источником и целью операции объединения нет общих имен полей, объединение приведет к декартову произведению всех строк — это называется «перекрестным объединением» (cross join).

Пример результирующего набора от операции "cross join"

Пример результирующего набора от операции "cross join"

Пример результирующего набора от операции "cross join" ![Сравнение входных данных до и после операции перекрестного объединения (которая может включать операцию объединения любого типа). Входные данные — это целевая таблица и входящий набор данных. Целевая таблица состоит из трех столбцов с двумя записями строк. Столбцы: 'Trade ID', 'Base Currency' и 'Amount'. Входящий набор данных имеет два столбца ('Trade Currency' и 'Rate') и две записи строк. Результирующая таблица имеет пять столбцов: 'Trade ID', 'Base Currency', 'Amount', 'Target Currency' и 'Rate'. Есть четыре записи строк, объединяющие все данные. Каждая запись 'Trade ID' имеет две строки с разными данными в других полях.](https://help.qlik.com/ru-RU/cloud-services/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/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm) | Этот раздел содержит дальнейшее объяснение концепций «объединения» (joining) и «сохранения» (keeping) наборов данных. |
| [Keep](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm) | Префикс загрузки `Keep` похож на префикс `Join`, но он не объединяет исходный и целевой наборы данных. Вместо этого он обрезает каждый набор данных в соответствии с типом принятой операции (внутреннее, внешнее, левое или правое). |

## Примеры скрипта загрузки - Left join

Left join сохраняет все записи из вашей основной (целевой) таблицы и добавляет соответствующие данные из второй (исходной) таблицы. Если в источнике нет совпадения, запись основной таблицы все равно отображается, но с пустыми полями из исходной таблицы.

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

#### Left join: базовый пример

Добавьте образец скрипта в свое приложение и запустите. Чтобы увидеть результат, добавьте поля, перечисленные в столбце результатов, на лист в вашем приложении.

Скрипт загрузки

```
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];

Table2:
Left Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ]; 
```

Для получения дополнительной информации об использовании встроенных загрузок см. [Использование встроенных загрузок для загрузки данных](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

Результаты

Результирующая таблица

| Column1 | Column2 | Column3 |
| --- | --- | --- |
| A | B | C |
| 1 | aa | xx |
| 2 | cc | - |
| 3 | ee | - |

Этот пример демонстрирует вывод Left Join, где объединяются только значения, присутствующие в первой (левой) таблице.

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

#### Пример Left join: обогащение заказов информацией о клиентах

Обзор

Предположим, у вас есть список заказов, но не все заказы имеют соответствующую запись клиента.

Скрипт загрузки

```
Orders:
Load * inline [
OrderID, CustomerID, Amount
1, 101, 200
2, 102, 150
3, 104, 400
];

Customers:
Left Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
```

Результаты

Если вы развернете окно предварительного просмотра в средстве просмотра модели данных, вы увидите часть полного результирующего набора, организованного в таблицу:

Предварительный просмотр таблицы в средстве просмотра модели данных

| OrderID | CustomerID | Amount | Name |
| --- | --- | --- | --- |
| 1 | 101 | 200 | Alice |
| 2 | 102 | 150 | Bob |
| 3 | 104 | 400 | - |

OrderID 1 и 2 имеют соответствующих клиентов. OrderID 3 не имеет соответствующего клиента, поэтому Name пусто.

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

#### Пример Left join: обогащение целевой таблицы эталонным набором данных

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, представляющий записи изменений, который загружается в таблицу с именем `Changes`. Он включает ключевое поле Status ID.

* Второй набор данных, представляющий статусы изменений, который загружается и объединяется с исходными записями изменений путем объединения его с префиксом загрузки `Join` с левым объединением.

Это левое объединение гарантирует, что записи изменений остаются нетронутыми, при этом добавляются атрибуты статуса там, где найдено совпадение во входящих записях статусов на основе общего Status 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');
```

Результаты

Откройте средство просмотра модели данных и обратите внимание на форму модели данных. Присутствует только одна денормализованная таблица. Это комбинация всех исходных записей изменений с соответствующими атрибутами статуса, присоединенными к каждой записи изменения.

Результирующая внутренняя модель данных

| Changes |
| --- |
| Change ID |
| Status ID |
| Scheduled Start Date |
| Scheduled End Date |
| Business Impact |
| Status |
| Sub Status |

Если вы развернете окно предварительного просмотра в средстве просмотра модели данных, вы увидите часть этого полного результирующего набора, организованного в таблицу:

Предварительный просмотр таблицы Changes в средстве просмотра модели данных

| Change ID | Status ID | Scheduled Start Date | Scheduled End Date | Business Impact | Status | Sub Status |
| --- | --- | --- | --- | --- | --- | --- |
| 10030 | 4 | 19/01/2022 | 23/02/2022 | None | Closed | Cancelled |
| 10031 | 3 | 20/01/2022 | 25/03/2022 | Low | Closed | Completed |
| 10015 | 3 | 04/01/2022 | 15/02/2022 | Low | Closed | Completed |
| 10103 | 1 | 02/04/2022 | 29/05/2022 | Medium | Open | Not Started |
| 10116 | 1 | 15/04/2022 | 24/04/2022 | None | Open | Not Started |
| 10134 | 1 | 03/05/2022 | 08/07/2022 | Low | Open | Not Started |
| 10264 | 1 | 10/09/2022 | 17/10/2022 | Medium | Open | Not Started |
| 10040 | 1 | 29/01/2022 | 22/04/2022 | None | Open | Not Started |
| 10323 | 1 | 08/11/2022 | 26/11/2022 | High | Open | Not Started |
| 10187 | 2 | 25/06/2022 | 24/08/2022 | Low | Open | Started |
| 10185 | 2 | 23/06/2022 | 08/09/2022 | None | Open | Started |
| 10220 | 2 | 28/07/2022 | 06/09/2022 | None | Open | Started |
| 10326 | 2 | 11/11/2022 | 05/12/2022 | None | Open | Started |
| 10138 | 2 | 07/05/2022 | 03/08/2022 | None | Open | Started |
| 10334 | 2 | 19/11/2022 | 06/02/2023 | Low | Open | Started |

Поскольку пятая строка в таблице Status (Status ID: '5', Status: 'Closed', Sub Status: 'Obsolete') не соответствует ни одной из записей в таблице Changes, информация в этой строке не отображается в результирующем наборе выше.

Вернитесь в редактор загрузки данных. Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: `Status`.

Добавьте эту меру:

`=Count([Change ID])`

Теперь вы можете проверить количество изменений по статусу.

Результирующая таблица

| Status | =Count([Change ID]) |
| --- | --- |
| Open | 12 |
| Closed | 3 |

## Примеры скрипта загрузки - Inner join

Inner join сохраняет только записи, которые существуют в обеих таблицах (на основе совпадающих значений полей).

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

#### Inner join: базовый пример

Скрипт загрузки

Добавьте образец скрипта в свое приложение и запустите. Чтобы увидеть результат, добавьте поля, перечисленные в столбце результатов, на лист в вашем приложении.

```
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];

Table2:
Inner Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
```

Для получения дополнительной информации об использовании встроенных загрузок см. [Использование встроенных загрузок для загрузки данных](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

Результаты

Результирующая таблица

| Column1 | Column2 | Column3 |
| --- | --- | --- |
| A | B | C |
| 1 | aa | xx |

Этот пример демонстрирует вывод Inner Join, где объединяются только значения, присутствующие как в первой (левой), так и во второй (правой) таблицах.

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

#### Пример Inner join: сокращение заказов только до отгруженных

Обзор

У вас есть заказы и список отгруженных заказов. Вы хотите получить только те заказы, которые были отгружены.

Скрипт загрузки

```
Orders:
Load * inline [
OrderID, Amount
1, 200
2, 150
3, 400
];

Shipped:
Inner Join (Orders)
Load * inline [
OrderID, ShipDate
2, 2022-05-01
3, 2022-05-02
4, 2022-05-03
];
```

Результаты

Если вы развернете окно предварительного просмотра в средстве просмотра модели данных, вы увидите часть полного результирующего набора, организованного в таблицу:

Предварительный просмотр таблицы в средстве просмотра модели данных

| OrderID | Amount | ShipDate |
| --- | --- | --- |
| 2 | 150 | 2022-05-01 |
| 3 | 400 | 2022-05-02 |

Отображаются только OrderID 2 и 3, потому что они существуют в обеих таблицах.

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

#### Пример Inner join: объединение только совпадающих записей

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, представляющий записи изменений, который загружается в таблицу с именем Changes.

* Второй набор данных, представляющий записи изменений, происходящие из исходной системы JIRA. Он загружается и объединяется с исходными записями путем объединения его с префиксом загрузки Inner Join.

Это Inner Join гарантирует, что сохраняются только пять записей изменений, которые найдены в обоих наборах данных.

Скрипт загрузки

```
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

Теперь вы можете проверить пять результирующих записей. Результирующая таблица от Inner Join будет включать только записи с совпадающей информацией в обоих наборах данных.

Результирующая таблица

| Source System | Change ID | Business Impact |
| --- | --- | --- |
| JIRA | 10030 | None |
| JIRA | 10134 | Low |
| JIRA | 10220 | None |
| JIRA | 10323 | High |
| JIRA | 10334 | Low |

## Примеры скрипта загрузки - Outer join

Outer join сохраняет все записи из обеих таблиц. Там, где нет совпадения, поля остаются пустыми.

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

#### Outer join: Базовый пример

Скрипт загрузки

Добавьте образец скрипта в свое приложение и запустите. Чтобы увидеть результат, добавьте поля, перечисленные в столбце результатов, на лист в вашем приложении.

```
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];

Table2:
Outer Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ]; 
```

Для получения дополнительной информации об использовании встроенных загрузок см. [Использование встроенных загрузок для загрузки данных](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

Результаты

Результирующая таблица

| Column1 | Column2 | Column3 |
| --- | --- | --- |
| A | B | C |
| 1 | aa | xx |
| 2 | cc | - |
| 3 | ee | - |
| 4 | - | yy |

В этом примере две таблицы, Table1 и Table2, объединяются в одну таблицу с меткой Table1. В таких случаях префикс outer часто используется для объединения нескольких таблиц в одну для выполнения агрегирования по значениям одной таблицы.

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

#### Outer join: создание полного списка всех клиентов и заказов

Обзор

Вы хотите получить полный список всех клиентов и заказов, даже если у некоторых клиентов нет заказов, а у некоторых заказов нет записи клиента.

Скрипт загрузки

```
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];

Customers:
Outer Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
```

Результаты

Если вы развернете окно предварительного просмотра в средстве просмотра модели данных, вы увидите часть этого полного результирующего набора, организованного в таблицу:

Предварительный просмотр таблицы в средстве просмотра модели данных

| OrderID | CustomerID | Name |
| --- | --- | --- |
| 1 | 101 | Alice |
| 2 | 102 | Bob |
| 3 | 104 | - |
| - | 103 | Carol |

OrderID 3 не имеет соответствующего клиента (Name пусто).

CustomerID 103 (Carol) не имеет соответствующего заказа (OrderID пусто).

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

#### Outer join: объединение перекрывающихся наборов записей

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, представляющий записи изменений, который загружается в таблицу с именем Changes.

* Второй набор данных, представляющий записи изменений, происходящие из исходной системы JIRA, который загружается и объединяется с исходными записями путем объединения его с префиксом загрузки 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 результирующих записей.

Результирующая таблица

| Source System | Change ID | Business Impact |
| --- | --- | --- |
| JIRA | 10030 | None |
| JIRA | 10134 | Low |
| JIRA | 10220 | None |
| JIRA | 10323 | - |
| JIRA | 10334 | Low |
| JIRA | 10597 | - |
| - | 10015 | Low |
| - | 10031 | Low |
| - | 10040 | None |
| - | 10138 | None |

## Примеры скрипта загрузки - Right join

Right join сохраняет все записи из исходной таблицы и добавляет соответствующую информацию из целевой таблицы. Если в целевой таблице нет совпадения, поля из нее остаются пустыми.

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

#### Right join: базовый пример

Скрипт загрузки

Добавьте образец скрипта в свое приложение и запустите. Чтобы увидеть результат, добавьте поля, перечисленные в столбце результатов, на лист в вашем приложении.

```
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];

Table2:
Right Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
```

Для получения дополнительной информации об использовании встроенных загрузок см. [Использование встроенных загрузок для загрузки данных](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

Результат

Результирующая таблица

| Column1 | Column2 | Column3 |
| --- | --- | --- |
| A | B | C |
| 1 | aa | xx |
| 4 | - | yy |

Этот пример демонстрирует вывод Right Join, где объединяются только значения, присутствующие во второй (правой) таблице.

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

#### Пример Right join: объединение всех клиентов с соответствующими заказами

Обзор

Ваша исходная таблица — это список клиентов; вы хотите получить всех клиентов, плюс любые соответствующие заказы.

Скрипт загрузки

```
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];

Customers:
Right Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
```

Результаты

Если вы развернете окно предварительного просмотра в средстве просмотра модели данных, вы увидите часть этого полного результирующего набора, организованного в таблицу:

Предварительный просмотр таблицы в средстве просмотра модели данных

| CustomerID | Name | OrderID |
| --- | --- | --- |
| 101 | Alice | 1 |
| 102 | Bob | 2 |
| 103 | Carol | - |

Отображаются все клиенты. У Кэрол нет заказов (OrderID пусто).

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

#### Пример Right join: обрезка целевой таблицы по вторичному эталонному набору данных

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, представляющий записи изменений, который загружается в таблицу с именем Changes.

* Второй набор данных, представляющий записи изменений, происходящие из исходной системы Teamwork. Он загружается и объединяется с исходными записями путем объединения его с префиксом загрузки Right Join.

Это гарантирует, что сохраняются только записи изменений Teamwork, при этом не теряются никакие записи Teamwork, если в целевой таблице нет соответствующего Change 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');

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

Теперь вы можете проверить пять результирующих записей.

Результирующая таблица

| Source System | Change ID | Business Impact |
| --- | --- | --- |
| Teamwork | 10015 | Low |
| Teamwork | 10031 | Low |
| Teamwork | 10040 | None |
| Teamwork | 10103 | Medium |
| Teamwork | 50231 | - |

## Устранение неполадок - Cross join

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

#### Пример устранения неполадок скрипта загрузки: нет общих имен полей

Обзор

Если вы объединяете две таблицы без совпадающих имен полей, каждая строка из первой таблицы будет объединена с каждой строкой из второй — потенциально создавая огромное количество записей (декартово произведение) и приводя к неожиданным ассоциациям данных.

Скрипт загрузки

```
TableA:
Load * inline [
A_ID, ValueA
1, foo
2, bar
];

TableB:
Join (TableA)
Load * inline [
B_ID, ValueB
10, baz
11, qux
];
```

Результаты

Если вы развернете окно предварительного просмотра в средстве просмотра модели данных, вы увидите часть этого полного результирующего набора, организованного в таблицу:

Предварительный просмотр таблицы в средстве просмотра модели данных

| A\_ID | ValueA | B\_ID | ValueB |
| --- | --- | --- | --- |
| 1 | foo | 10 | baz |
| 1 | foo | 11 | qux |
| 2 | bar | 10 | baz |
| 2 | bar | 11 | qux |

Каждый A\_ID сопряжен с каждым B\_ID (всего 4 строки).

Примечание к подсказкеВсегда проверяйте, что имена ваших полей совпадают должным образом, прежде чем запускать объединение.

[Load](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)

[Select](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)

[Inner](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Inner.htm)

[Outer](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Outer.htm)

[Left](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Left.htm)

[Right](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Right.htm)

[Keep](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm)

[Объединение таблиц с помощью Join и Keep](https://help.qlik.com/ru-RU/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)