Gå till huvudinnehåll

Exists - skriptfunktion

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

Observera: Du 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 om du använder Not Exists() i en where-sats. Exists()-funktionen testar både tidigare laddade tabeller och tidigare laddade värden i den aktuella tabellen. Så endast den första förekomsten laddas. När den kommer till den andra förekomsten har värdet redan laddats. Se exemplen för mer information.

Syntax:  

Exists(field_name [, expr])

Return data type: Boolesk

Arguments:  

Argument
Argument Beskrivning
field_name

Namnet på fältet där du vill söka efter ett värde. Du kan använda explicita fältnamn utan citattecken.

Fältet måste redan vara laddat av skriptet. Det vill säga, du kan inte hänvisa till ett fält som laddas i en sats längre ned i skriptet.

expr

Värdet som du vill kontrollera om det finns. Du kan använda ett explicit värde eller ett uttryck som hänvisar till ett eller flera fält i den aktuella load-satsen.

Observera: Du kan inte hänvisa till fält som inte ingår i den aktuella load-satsen.

Det här argumentet är valfritt Om du utesluter det kommer funktionen att kontrollera om värdet field_name i den aktuella posten redan existerar.

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 '|');   Drop Tables Employees;

Example:  

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.

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

Example:  

Exists(Employee, 'Bill')

Returnerar -1 (True) om fältvärdet 'Bill' hittas i det aktuella innehållet i fältet 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;

 

Detta resulterar i en tabell som du kan använda i en tabellvisualisering med 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 tabellen Employees för att undvika sammanblandning.

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

Detta innebär att enbart namnen 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 att endast ett inkluderas i resultattabellen. När du laddar den första raden inkluderas värdet i symboltabellen Employee. När den andra raden kontrolleras finns alltså redan värdet.

I nästa exempel visas hur du laddar alla värden.

Resultat
Employee Address
Mary London
Lucy Madrid

Example:  

Anställda: 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;

 

För att hämta alla värden för Lucy måste du ändra på två saker:

  • Lägg till en tidigare laddning för Employees där du ändrar namn på Employee till Name.

    Load Employee As Name, ID, Salary;

  • Ändra på Where-villkoret i Citizens till:

    not Exists (Name, Employee).

Detta skapar olika symboltabeller för Name och Employee. När den andra raden för Lucy kontrolleras finns den fortfarande inte i Name.

Resultat
Employee Address
Mary London
Lucy Madrid
Lucy Paris