# Exists — funkcja skryptu

Funkcja Exists() określa, czy podana wartość pola została już załadowana w polu w skrypcie ładowania. Funkcja zwraca wartość TRUE lub FALSE, dzięki czemu może zostać użyta w klauzuli where instrukcji LOAD lub funkcji IF.

InformacjaMożna również użyć funkcji Not Exists(), aby określić, czy wartość pola nie została załadowana, ale zalecana jest uwaga w przypadku używania Not Exists() w klauzuli where. Funkcja Exists() testuje zarówno wcześniej załadowane tabele, jak i wcześniej załadowane wartości w bieżącej tabeli. Tak więc tylko pierwsze wystąpienie zostanie załadowane. W momencie napotkania drugiego wystąpienia wartość jest już załadowana. Więcej informacji w przykładach.

Składnia:

Exists(field\_name [, expr] )

**Typ zwracanych danych:** wartość logiczna

Argumenty:

Argumenty Exists

| Argument | Opis |
| --- | --- |
| field\_name | Nazwa pola, w którym chcesz wyszukać wartość. Można użyć konkretnej nazwy pola bez cudzysłowów.<br><br>Pole musi być już załadowane przez skrypt. Oznacza to, że nie można odnosić się do pola, które jest ładowane w klauzuli znajdującej się dalej w skrypcie. |
| expr | Wartość, której istnienie chcemy sprawdzić. Można użyć konkretnej wartości lub wyrażenia, które odnosi się do jednego lub kilku pól w bieżącej instrukcji LOAD.<br><br>InformacjaNie można odnosić się do pól, które nie są zawarte w aktualnej instrukcji LOAD.<br><br>Ten argument jest opcjonalny. W przypadku jego pominięcia funkcja sprawdzi, czy wartość field\_name w bieżącym rekordzie już istnieje. |

Przykład 1:

`Exists 
 (Employee)`

Zwraca –1 (True), jeśli wartość pola Employee w bieżącym rekordzie już istnieje w jakimkolwiek wcześniej wczytanym rekordzie zawierającym to pole.

Przykład 2:

`Exists(Employee, 
 'Bill')`

Zwraca –1 (True), jeśli wartość pola 'Bill' występuje w bieżącej zawartości pola Employee.

Instrukcje `Exists (Employee, Employee)` i `Exists (Employee)` są równoważne.

Przykład 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;
```

W efekcie otrzymuje się tabelę o nazwie Citizens w modelu danych, którą można wyświetlać jako wykres tabeli przy użyciu wymiarów Employee i Address.

Klauzula where w postaci `where Exists (Employee)` oznacza, że tylko nazwy z tabeli Citizens, które znajdują się także w tabeli Employees, są ładowane do nowej tabeli. Instrukcja Drop umożliwia usunięcie tabeli tymczasowej Employees w celu uniknięcia pomyłek.

Wyniki przykładu 3

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

Przykład 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;
```

Klauzula where uwzględnia not: `where not Exists (Employee)`.

Oznacza to, że do nowej tabeli ładowane są tylko te nazwy z tabeli Citizens, których nie ma w Employees.

Zauważ, że w tabeli Citizens znajdują się dwie wartości Lucy, ale tylko jedna z nich jest uwzględniona w tabeli wyników. Po załadowaniu pierwszego wiersza wartość Lucy jest umieszczana w polu Employee. W związku z tym, gdy sprawdzany jest drugi wiersz, wartość już istnieje.

Wyniki przykładu 4

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

Przykład 5:

Ten przykład pokazuje, jak załadować wszystkie wartości.

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

Aby móc uzyskać wszystkie wartości dla Lucy, zmieniono dwie rzeczy:

* Wstawiono poprzedzającą instrukcję LOAD w celu ładowania do tabeli Employees, gdzie zmieniono nazwę Employee na Name.

  Load Employee As Name;

* Warunek Where w Citizens zmieniono na:

  not Exists (Name, Employee).

Powoduje to utworzenie pól dla Name i Employee. Kiedy sprawdzany jest drugi wiersz z Lucy, to nadal nie istnieje w Name.

Wyniki przykładu 5

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

Dane zastosowane w przykładzie:

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