# Exists - skriptfunktion

Exists() avgör om ett specifikt fältvärde redan har laddats in i fältet i laddningsskriptet. Funktionen returnerar TRUE eller FALSE och kan alltså användas i where-satsen i en LOAD-sats eller en IF-funktion.

Anteckning om informationDu kan även använda Not Exists() för att avgöra om ett fältvärde inte har laddats, men du bör vara försiktig med att använda Not Exists() i en where-sats. Funktionen Exists() testar både tidigare laddade tabeller och tidigare laddade värden i den aktuella tabellen. Alltså laddas bara den första förekomsten. När den andra förekomsten påträffas har värdet redan laddats. Mer information finns i exemplen.

Syntax:

Exists(field\_name [, expr] )

**Typ av returdata:** Boolesk

Argument:

Exists-argument

| Argument | Beskrivning |
| --- | --- |
| field\_name | Namnet på det fält du vill söka efter ett värde i. Du kan använda ett explicit fältnamn utan citattecken.<br><br>Fältet måste redan vara laddat av skriptet. Det innebär att du inte kan referera till ett fält som laddas i en sats senare i skriptet. |
| expr | Värdet som du vill kontrollera om det finns. Du kan använda ett explicit värde eller ett uttryck som refererar till ett eller flera fält i den aktuella LOAD-satsen.<br><br>Anteckning om informationDu kan inte referera till fält som inte finns med i den aktuella LOAD-satsen.<br><br>Det här argumentet är valfritt. Om du utesluter det kommer funktionen att kontrollera om värdet för field\_name i den aktuella posten redan finns. |

Exempel 1:

`Exists 
 (Employee)`

Returnerar -1 (True) om fältets värde Employee i den aktuella posten redan finns i en tidigare läst post som innehåller detta fält.

Exempel 2:

`Exists(Employee, 
 'Bill')`

Returnerar -1 (True) om fältvärdet 'Bill' hittas i det aktuella innehållet i fältet Employee.

Satserna `Exists (Employee, Employee)` och `Exists (Employee)` är ekvivalenta.

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

Detta resulterar i en tabell med namnet Citizens i datamodellen, som kan visas som ett tabelldiagram med hjälp av dimensionerna Employee och Address.

where-satsen: `where Exists (Employee)`, betyder att enbart namnen från tabellen Citizens som också finns i Employees laddas till den nya tabellen. Satsen Drop avlägsnar den tillfälliga tabellen Employees för att undvika sammanblandning.

Resultat för exempel 3

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

Exempel 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-satsen innehåller: not: `where not Exists (Employee)`.

Det betyder att enbart de namn från tabellen Citizens som inte finns i Employees laddas in i den nya tabellen.

Observera att det finns två värden för Lucy i tabellen Citizens, men bara ett inkluderas i resultattabellen. När du laddar den första raden med värdet Lucy inkluderas det i Employee-fältet. Alltså finns värdet redan när den andra raden kontrolleras.

Resultat för exempel 4

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

Exempel 5:

I detta exempel visas hur du laddar alla värden.

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

För att göra det möjligt att få alla värden för Lucy ändrades två saker:

* En föregående laddning till Employees-tabellen infogades där Employee namnändrades till Name.

  Load Employee As Name;

* Where-villkoret i Citizens ändrades till:

  not Exists (Name, Employee).

Detta skapar fält för Name och Employee. När andra raden med Lucy kontrolleras finns det fortfarande inte i Name.

Resultat för exempel 5

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

Data som används i exemplet:

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