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

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

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

Синтаксис:

Exists(field\_name [, expr] )

**Тип возврата данных:** Булево значение

Аргументы:

аргументы Exists

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

Пример 1:

`Exists 
 (Employee)`

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

Пример 2:

`Exists(Employee, 
 'Bill')`

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

Операторы `Exists (Employee, Employee)` и `Exists (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;
```

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

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

Результаты примера 3

| 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. Следовательно, когда проверяется вторая строка, значение уже существует.

Результаты примера 4

| Employee | Address |
| --- | --- |
| 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.

Результаты примера 5

| Employee | Address |
| --- | --- |
| Mary | London |
| Lucy | Madrid |
| Lucy | Paris |

Данные, используемые в примере:

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 '|');