# Exists — функция скрипта

Функция Exists() определяет, загружено ли определенное значение поля в поле в скрипте загрузки данных. Функция возвращает значение TRUE или FALSE, таким образом, ее можно использовать в предложении where оператора LOAD или IF.

Примечание к информацииДля определения случаев, когда значение поля загружено не было, можно использовать функцию Not Exists(). Однако Not Exists() в предложении Where следует использовать с осторожностью. Функция Exists() проверяет ранее загруженные таблицы и ранее загруженные значения текущей таблицы. Таким образом, загружается только первое вхождение. На момент обнаружения второго вхождения значение уже загружено. Для получения дополнительной информации см. примеры.

Синтаксис:

Exists(field\_name [, expr])

Возвращаемые типы данных: Булево

Аргументы:

Аргументы

| Аргумент | Описание |
| --- | --- |
| field\_name | Имя поля, в котором необходимо выполнить поиск значения. Можно использовать явное имя поля без кавычек.<br><br>Поле должно быть уже загружено при помощи скрипта. Это означает, что нельзя ссылаться на поле, загруженное предложением далее по скрипту. |
| expr | Значение, которое необходимо проверить, при условии его существования. Можно использовать явное значение или выражение, которое ссылается на одно или несколько полей текущего оператора load.<br><br>Примечание к информацииНельзя ссылаться на поля, не включенные в текущий оператор load.<br><br>Данный аргумент является дополнительным. Если его пропустить, функция будет проверять, существует ли значение field\_name в текущей записи. |

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

#### Примеры и результаты:

Пример 1.

`Exists 
 (Employee)`

Возвращает -1 (True), если значение поля Employee в текущей записи уже существует в любой ранее прочитанной записи, содержащей это поле.

Операторы `Exists (Employee, Employee)` и `Exists (Employee)` эквивалентны.

Пример 2.

`Exists(Employee, 
 'Bill')`

Возвращает -1 (True), если значение поля 'Bill' найдено в текущем содержимом поля Employee.

Пример 3

```
Employees:
LOAD * inline [
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');

Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where Exists (Employee);

Drop Tables Employees;
```

В результате будет получена таблица, которую можно использовать в визуализации таблицы с помощью измерений Employee и Address.

Предложение where, `where Exists (Employee)`, означает только имена из таблицы Citizens, загруженные в новую таблицу, которые также находятся в таблице Employees. Оператор Drop удаляет таблицу Employees во избежание неопределенности.

Результаты

|  |  |
| --- | --- |
| Employee | Address |
| Bill | New York |
| John | Miami |
| Steve | Chicago |

Пример 4

```
Employees:
Load * inline [ 
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where not Exists (Employee);
 
Drop Tables Employees;
```

Предложение where, включая not: `where not Exists (Employee)`.

Это означает, что в новую таблицу загружаются только имена из таблицы Citizens, отсутствующие в таблице Employees.

Обратите внимание, что для Lucy в таблице Citizens имеются два значения, однако в результирующую таблицу включается только одно из них. При загрузке первой строки значение Lucy включается в поле Employee. Таким образом, в ходе проверки второй строки значение уже существует.

Результаты

| Сотрудник | Адрес |
| --- | --- |
| Mary | London |
| Lucy | Madrid |

Пример 5

Этот пример демонстрирует порядок загрузки всех значений.

```
Employees:
Load Employee As Name;
LOAD * inline [
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where not Exists (Name, Employee);
 
Drop Tables Employees;
```

Чтобы получить все значения для Lucy, внесены два изменения:

* В таблицу Employees была вставлена предшествующая загрузка, где Employee переименовано в Name.

  `
  Load Employee As Name;`

* Условие Where в Citizens изменено на:

  `not Exists (Name, Employee).`

Это создает поля для Name и Employee. Когда проверяется вторая строка с Lucy, она еще не существует в Name.

Результаты

| Сотрудник | Адрес |
| --- | --- |
| Mary | London |
| Lucy | Madrid |
| Lucy | Paris |