# Join

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

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

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

Left join

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

Inner join

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

Outer join

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

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

Right join

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

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

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

Примеры наборов результатов для различных типов операции соединения ![Примеры наборов результатов для различных типов операции соединения с представлением таблиц данных до и после каждой операции.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-join-examples-operations.png)

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

Пример набора результатов операции «перекрестное соединение»

Пример набора результатов операции «перекрестное соединение»

Пример набора результатов операции «перекрестное соединение» ![Сравнение входных данных с выходными данными после операции перекрестного соединения (которая может включать операцию соединения любого типа): до и после.](https://help.qlik.com/ru-RU/sense/November2024/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/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm) | В этом разделе дается дальнейшее объяснение понятий «соединения» (Join) и «сохранения» (Keep) наборов данных. |
| [Keep](https://help.qlik.com/ru-RU/sense/November2024/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`. Она включает ключевое поле Status ID.

* Второй набор данных, представляющий состояния изменений, который загружается и объединяется с исходными записями об изменениях путем левого соединения с использованием префикса загрузки left `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 (Воздействие на бизнес) |
| Состояние |
| Sub Status (Дополнительное состояние) |

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

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

| Change ID (ИД изменения) | Status ID (ИД состояния) | Scheduled Start Date (Запланированная дата начала) | Scheduled End Date (Запланированная дата окончания) | Business Impact (Воздействие на бизнес) | Состояние | Sub Status (Дополнительное состояние) |
| --- | --- | --- | --- | --- | --- | --- |
| 10030 | 4 | 19/01/2022 | 23/02/2022 | Отсутствует | Closed | Отменено |
| 10031 | 3 | 20/01/2022 | 25/03/2022 | Низкое | Closed | Завершено |
| 10015 | 3 | 04/01/2022 | 15/02/2022 | Низкое | Closed | Завершено |
| 10103 | 1 | 02/04/2022 | 29/05/2022 | Средний | Открыть | Not Started |
| 10116 | 1 | 15/04/2022 | 24/04/2022 | Отсутствует | Открыть | Not Started |
| 10134 | 1 | 03/05/2022 | 08/07/2022 | Низкое | Открыть | Not Started |
| 10264 | 1 | 10/09/2022 | 17/10/2022 | Средний | Открыть | Not Started |
| 10040 | 1 | 29/01/2022 | 22/04/2022 | Отсутствует | Открыть | Not Started |
| 10323 | 1 | 08/11/2022 | 26/11/2022 | Высокое | Открыть | Not Started |
| 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 | Низкое | Открыть | Выполнение начато |

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

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

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

`=Count([Change ID])`

Теперь можно проверить количество изменений по состоянию.

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

| Состояние | =Count([Change ID]) |
| --- | --- |
| Открыть | 12 |
| Closed | 3 |

## Пример 2. Внутреннее соединение: соединение только совпадающих записей

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

#### Скрипт загрузки и результаты

Обзор

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

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

* Набор данных, представляющий записи об изменениях, который загружается в таблицу под именем `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 | Отсутствует |
| 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`, который загружается и объединяется с исходными записями путем соединения с использованием префикса загрузки `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 | Отсутствует |
| 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. Он загружается и объединяется с исходными записями путем присоединения к нему префикса загрузки 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 | Низкое |
| Teamwork (Коллективная работа) | 10031 | Низкое |
| Teamwork (Коллективная работа) | 10040 | Отсутствует |
| Teamwork (Коллективная работа) | 10103 | Средний |
| Teamwork (Коллективная работа) | 50231 | - |

## Подробнее

* [Load](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Inner](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Inner.htm)
* [Outer](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Outer.htm)
* [Left](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Left.htm)
* [Right](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Right.htm)
* [Keep](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm)
* [Объединение таблиц с помощью операторов Join и Keep](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)