跳到主要內容

Exists - 指令碼函數

Exists() 會確定載入指令碼中的欄位內是否已載入特定欄位值。該函數會傳回 TRUE 或 FALSE,可用於 LOAD 陳述式或 IF 函數的 where 子句中。

備註: 您也可以使用 Not Exists() 判定是否尚未載入欄位值,但若您在 where 子句中使用 Not Exists(),建議謹慎使用。Exists() 函數測試先前載入的表格以及目前表格中先前載入的值。因此,只要載入首次出現的內容即可。遇到第二次出現的內容時,該值已被載入。請參閱範例瞭解更多資訊。

Syntax:  

Exists(field_name [, expr] )

傳回資料類型:布林

Arguments:  

Exists 引數
引數 描述
field_name

您想要搜尋值的欄位名稱。您可以使用沒有引號的明確欄位名稱。

必須已透過指令碼載入欄位。這表示,您無法參考透過子句、再透過指令碼載入的欄位。

expr

您要檢查的值 (若存在)。您可以使用一個明確的值,或使用參考目前 LOAD 陳述式中一個或數個欄位的運算式。

備註: 您無法參考未納入目前 LOAD 陳述式中的欄位。

此引數為選擇性。若您省略,函數將會檢查目前記錄中的 field_name 值是否已存在。

Example 1:  

Exists (Employee)

如果目前記錄中欄位 Employee 的值已經存在於任何先前讀取的記錄 (包含該欄位) 中,則會傳回 -1 (True)。

Example 2:  

Exists(Employee, 'Bill')

如果欄位值 'Bill' 被發現位於欄位 Employee 的目前內容中,則會傳回 -1 (True)。

陳述式 Exists (Employee, Employee)Exists (Employee) 相當。

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;
 

此結果位於資料模型中名為 EmployeeAddresses 的表格中,可以將其視為使用 EmployeeAddress 維度的表格圖表。

where 子句:where Exists (Employee, Name),僅表示來自表格 Citizens 的名稱,這些名稱也位於載入至新表格的 Employees 中。Drop 陳述式會移除暫時表格 EmployeesCitizens,以避免混淆。

範例 3 結果
EmployeeAddress
BillNew York
JohnMiami
SteveChicago

Example 4:  

透過 where not Exists,在建置表格 EmployeeAddresses 的先前範例中,使用以下內容取代樣本資料中的陳述式。

NonEmployee:

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

 

where 子句包括 notwhere not Exists (Employee, Name)

這表示,只有來自不是位於 Employees 的表格 Citizens 的名稱會載入新的表格中。

請注意,Citizens 表格中有兩個 Lucy 的值,但只有一個值納入結果表格中。載入第一列時,值會納入 Employee 符號表格中。因此,檢查第二行時,值已經存在。

下一個範例顯示如何載入所有值。

範例 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;
 

為了能夠取得 Lucy 的所有值,您需要變更兩件事:

  • 將之前的載入新增至 Employees,在此您將 Employee 重新命名為 Name

    Load Employee As Name, ID, Salary;

  • Citizens 中的 Where 條件變更為:

    not Exists (Name, Employee)。

這將會為 NameEmployee 建立不同的符號表格。檢查 Lucy 的第二列時,這仍然沒有存在於 Name

範例 5 結果
EmployeeAddress
MaryLondon
LucyMadrid
LucyParis

範例中使用的資料:

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