Vai al contenuto principale

Exists - funzione di script

Exists() determina se un valore di campo specifico è già stato caricato nel campo nello script di caricamento. La funzione restituisce TRUE o FALSE, quindi può essere utilizzata nella clausola where di un'istruzione LOAD o una funzione IF.

Nota: Ora è possibile utilizzare anche Not Exists() per determinare se un valore di campo non è stato caricato, tuttavia si raccomanda cautela in caso di utilizzo di Not Exists() in una clausola WHERE. La funzione Exists() testa sia le tabelle precedentemente caricate sia i valori precedentemente caricati nella tabella corrente. Pertanto, verrà caricata solo la prima occorrenza. Quando viene incontrata la seconda occorrenza, il valore risulta già caricato. Vedere gli esempi per ulteriori informazioni.

Syntax:  

Exists(field_name [, expr] )

Restituisce il tipo di dati: Booleano

Arguments:  

Argomenti Exists
Argomento Descrizione
field_name

Il nome del campo in cui si desidera ricercare un valore. È possibile utilizzare un nome di campo esplicito senza virgolette.

Il campo deve essere già stato caricato dallo script. Ciò significa che non si può fare riferimento a un campo caricato in una clausola posta più avanti nello script.

expr

Il valore di cui si desidera controllare l'esistenza. È possibile utilizzare un valore esplicito o un'espressione che si riferisce a uno o più campi nell'attuale istruzione LOAD.

Nota: Non è possibile fare riferimento a campi non inclusi nell'istruzione LOAD corrente.

Questo argomento è opzionale. Se lo si omette, la funzione controllerà se il valore di field_name nel record corrente esiste già.

Example 1:  

Exists (Employee)

Restituisce -1 (True) se il valore di campo Employee nel record attuale esiste già in uno qualsiasi dei record letti in precedenza contenenti tale campo.

Example 2:  

Exists(Employee, 'Bill')

Restituisce -1 (True) se il valore di campo 'Bill' viene trovato nel contenuto attuale del campo Employee.

Le istruzioni Exists (Employee, Employee) e Exists (Employee) sono equivalenti.

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

Il risultato è una tabella denominata EmployeeAddresses nel modello dati, che può essere visualizzata come grafico tabellare utilizzando le dimensioni Employee e Address.

La clausola where: where Exists (Employee, Name), significa che nella nuova tabella vengono caricati solo i nomi della tabella Citizens che sono anche presenti in Employees. Per evitare confusione, l'istruzione Drop rimuove le tabelle temporanee Employees e Citizens.

Risultati esempio 3
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Example 4:  

Sostituzione dell'istruzione nei dati campione dell'esempio precedente che crea la tabella EmployeeAddresses con i seguenti valori, utilizzando where not Exists.

NonEmployee:

Load Name as Employee, Address Resident Citizens where not Exists (Employee, Name);

 

La clausola where include not: where not Exists (Employee, Name).

Ciò significa che solo i nomi presenti nella tabella Citizens che non sono inclusi in Employees vengono caricati nella nuova tabella.

Notare che sono presenti due valori per Lucy nella tabella Citizens, ma solo uno è incluso nella tabella dei risultati. Quando si carica la prima riga, il valore viene incluso nella tabella dei simboli Employee. Pertanto, quando viene controllata la seconda riga, il valore risulta adesso esistente.

L'esempio successivo mostra come caricare tutti i valori.

Risultati esempio 4
EmployeeAddress
MaryLondon
LucyMadrid

Example 5:  

Employees: 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;
 

Per ottenere tutti i valori per Lucy è necessario modificare due aspetti:

  • Aggiungere un carico precedente a Employees in cui si rinomina Employee in Name.

    Caricare il dipendente come Nome, ID, Stipendio;

  • Modificare la condizione Where in Citizens a:

    not Exists (Nome, Dipendente).

Ciò creerà tabelle dei simboli diverse per Name e Employee. Quando viene controllata la seconda riga per Lucy, non esiste ancora in Name.

Risultati esempio 5
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

Dati utilizzati nell'esempio:

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