Перейти к основному содержимому

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

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

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

Syntax:  

Exists(field_name [, expr])

Return data type: Булево значение

Arguments:  

Аргументы
Аргумент Описание
field_name

Имя поля, в котором необходимо выполнить поиск значения. Можно использовать явное имя поля без кавычек.

Поле должно быть уже загружено при помощи скрипта. Это означает, что нельзя ссылаться на поле, загруженное предложением далее по скрипту.

expr

Значение, которое необходимо проверить, при условии его существования. Можно использовать явное значение или выражение, которое ссылается на одно или несколько полей текущего оператора load.

Примечание: Нельзя ссылаться на поля, не включенные в текущий оператор load.

Данный аргумент является дополнительным. Если его пропустить, функция будет проверять, существует ли значение field_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 '|');   Drop Tables Employees;

Example:  

Exists (Employee)

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

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

Example:  

Exists(Employee, 'Bill')

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

Example:  

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

Example:  

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|Miami22222222223
+0 ] (delimiter is '|') where not Exists (Employee);   Drop Tables Employees;

 

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

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

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

В следующем примере показан порядок загрузки всех значений.

Результаты
Employee Address
Mary London
Lucy Madrid

Example:  

Сотрудники: Load Employee As Name, ID, Salary; 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, необходимо внести два изменения:

  • Добавьте предшествующий оператор load к Employees, где необходимо переименовать Employee на Name.

    Load Employee As Name, ID, Salary;

  • Измените условие Where в Citizens на:

    not Exists (Name, Employee).

Будут созданы разные таблицы символов для Name и Employee. В ходе проверки второй строки для значения Lucy оно не будет существовать в Name.

Результаты
Employee Address
Mary London
Lucy Madrid
Lucy Paris