# Exists - 指令碼函數

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

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

語法：

Exists(field\_name [, expr] )

**傳回資料類型：** 布林

引數：

Exists 引數

| 引數 | 描述 |
| --- | --- |
| field\_name | 您想要搜尋值的欄位名稱。您可以使用沒有引號的明確欄位名稱。<br><br>必須已透過指令碼載入欄位。這表示，您無法參考透過子句、再透過指令碼載入的欄位。 |
| expr | 您要檢查的值 (若存在)。您可以使用一個明確的值，或使用參考目前 LOAD 陳述式中一個或數個欄位的運算式。<br><br>資訊備註您無法參考未納入目前 LOAD 陳述式中的欄位。<br><br>此引數為選擇性。若您省略，函數將會檢查目前記錄中的 field\_name 值是否已存在。 |

範例 1:

`Exists 
 (Employee)`

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

範例 2:

`Exists(Employee, 
 'Bill')`

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

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

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

此結果位於資料模型中名為 Citizens 的表格中，可以將其視為使用 Employee 和 Address 維度的表格圖表。

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

範例 3 結果

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

範例 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 子句包括 not：`where not Exists (Employee)`。

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

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

範例 4 結果

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

範例 5:

此範例顯示如何載入所有值。

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

為了能夠取得 Lucy 的所有值，變更了兩件事：

* 已插入 Employees 表格的前置載入，其中 Employee 重新命名為 Name。

  Load Employee As Name;

* Citizens 中的 Where 條件變更為：

  not Exists (Name, Employee).

這會建立 Name 和 Employee 的欄位。檢查含有 Lucy 的第二列時，這仍然沒有存在於 Name。

範例 5 結果

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

範例中使用的資料：

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