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.
Instrukcje Exists (Employee, Employee) i Exists (Employee) są równoważne.
|
Exists(Employee,
'Bill')
|
Zwraca –1 (True), jeśli wartość pola 'Bill' występuje w bieżącej zawartości pola Employee.
|
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ę, której można użyć w wizualizacji tabeli przy użyciu wymiarów Employee i Address.
Klauzula where: where Exists (Employee) oznacza, że tylko nazwy z tabeliCitizens, które znajdują się także w tabeli Employees, są ładowane do nowej tabeli. Instrukcja Drop usuwa tabelę Employees w celu uniknięcia pomyłek.
Wyniki
|
Employee |
Address |
Bill |
New York |
John |
Miami |
Steve |
Chicago |
|
|
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 zawiera not: where not Exists (Employee, Name).
To oznacza, że tylko te nazwy z tabeli Citizens, które nie znajdują się w tabeli Employees, są ładowane do nowej tabeli.
Zwróć uwagę, że istnieją dwie wartości dla Lucy w tabeli Citizens, ale tylko jedna jest uwzględniana w tabeli wynikowej. W momencie ładowania pierwszego wiersza wartość jest zawarta w tabeli symboli Employee. Z tego powodu w momencie sprawdzania drugiego wiersza ta wartość już istnieje.
W następnym przykładzie pokazano, w jaki sposób załadować wszystkie wartości.
Wyniki
|
Employee |
Address |
Mary |
London |
Lucy |
Madrid |
|
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;
|
Aby można było pobrać wszystkie wartości dla Lucy, należy zmienić dwie rzeczy:
-
Dodać wcześniejszą instrukcję load do tabeli Employees, w której nastąpi zmiana nazwy pola z Employee na Name.
Load Employee As Name, ID, Salary;
-
Zmienić warunek Where w Citizens na:
not Exists (Name, Employee).
W ten sposób zostaną utworzone różne tabele symboli dla Name i Employee. W momencie sprawdzania drugiego wiersza pod kątem wartości Lucy nadal nie istnieje ona w tabeli Name.
Employee |
Address |
Mary |
London |
Lucy |
Madrid |
Lucy |
Paris |
|